zoukankan      html  css  js  c++  java
  • POJ2635(数论+欧拉筛+大数除法)

    题目链接:https://vjudge.net/problem/POJ-2635

    题意:给定一个由两个质数积的大数M和一个数L,问大数M的其中较小的质数是否小于L。

    题解:因为大数M已经超过long long 范围,那么我们就需要进行大数分解由十进制转换为1000进制,然后只要从2-L遍历一遍。

    代码详情:

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<vector>
     4 #include<cstring>
     5 #include<cstdio>
     6 #include<queue>
     7 using namespace std;
     8 #define mem(s,n) memset(s,n,sizeof s);
     9 typedef long long ll;
    10 const int maxn=2e6+100;
    11 const int Inf=0x7f7f7f7f;
    12 bool isprime[maxn];
    13 int prime[maxn];
    14 int cnt;
    15 // 欧拉筛打表素数表;
    16 void judge()
    17 {
    18     mem(isprime,1);
    19     cnt=0;
    20     isprime[1]=0;
    21     for(int i=2;i<maxn;i++)
    22     {
    23         if(isprime[i]==1)
    24         prime[cnt++]=i;
    25         for(int j=0;j<cnt&&(i*prime[j])<maxn;j++)
    26         {
    27             isprime[i*prime[j]]=0;
    28             if(i%prime[j]==0)
    29             {
    30                 break;
    31             }
    32         }
    33     }
    34 }
    35 int main()
    36 {
    37     char s[1005];
    38     int n,k;
    39     judge();
    40     while(scanf("%s%d",s,&n)&&(s[0]!='0'&&n!=0))
    41     {
    42         int len=strlen(s);
    43         for( k=2;k<n;k++)
    44         {
    45             if(isprime[k]==0) continue;
    46             int num=0;
    47             //大数分解;
    48             for(int i=0;i<len;i+=3)
    49             {
    50                 int t=0,ks=1;
    51                 for(int j=i;j<i+3&&j<len;j++) //转化为1000进制;
    52                 {
    53                     ks*=10;
    54                     t=t*10+s[j]-'0';
    55                 }
    56                 num=num*ks+t;
    57                 num%=k;
    58             }
    59             //关键;
    60             if(num==0) 
    61             {
    62                 printf("BAD %d
    ",k);
    63                 break;
    64             }
    65         }
    66         if(k==n) puts("GOOD");
    67     }
    68     return 0;
    69 }
    View Code
  • 相关阅读:
    python encode和decode函数说明【转载】
    python进阶--打包为exe文件
    python进阶--文件读写操作
    Python标准库_ sys,random,time
    Vmware 克隆CentOS 网络IP配置
    Esxi主机虚拟机迁移注意事项
    VMware ESXI4.1 常用命令
    ESX与ESXi管理员必备25个命令
    vcredist作用
    vim基本命令之剪切复制粘贴替换
  • 原文地址:https://www.cnblogs.com/zpj61/p/13446192.html
Copyright © 2011-2022 走看看