POJ 2635 The Embarrassed Cryptographer 高精度

2014-11-23 23:11:58 · 作者: · 浏览: 4
题意:给出一个n和L,一直n一定可以分解成两个素数相乘。
让你判断,如果这两个素数都大于等于L,则输出GOOD,否则输出最小的那个素数。
从1到1000000的素数求出来,然后一个一个枚举到L,看能否被n整除,能的话就输出BAD+改素数
都不行的话,说明两个素数都大于等于L,输出GOOD
AC代码:
#include    
#include    
#include    
#include    
#include    
#include    
#include    
#include    
#include    
#include    
#include    
#include    
#include    
#include    
#include    
#include    
using namespace std;  
  
typedef long long LL;  
const int N=1000005;  
const LL II=100000000;  
const int INF=0x3f3f3f3f;  
const double PI=acos(-1.0);  
  
LL pri[N/100];  
bool num[N];  
int xx;  
char s[105];  
LL x[100];  
  
void prime()  
{  
    LL i,j;  
    int k=0;  
    memset(num,0,sizeof(num));  
    for(i=2;i=0;i--)  
        xh=(xh*II+x[i])%p;  
    if(xh==0)  
        return true;  
    return false;  
}  
  
int main()  
{  
    int i,j,L;  
    prime();  
    while(scanf("%s%d",s,&L))  
    {  
        if(strcmp(s,"0")==0&&L==0)  
            break;  
        int len;  
        toint(s,x,len);  
        int p=1,flag=0;  
        while(pri[p]
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long LL; const int N=1000005; const LL II=100000000; const int INF=0x3f3f3f3f; const double PI=acos(-1.0); LL pri[N/100]; bool num[N]; int xx; char s[105]; LL x[100]; void prime() { LL i,j; int k=0; memset(num,0,sizeof(num)); for(i=2;i=0;i--) xh=(xh*II+x[i])%p; if(xh==0) return true; return false; } int main() { int i,j,L; prime(); while(scanf("%s%d",s,&L)) { if(strcmp(s,"0")==0&&L==0) break; int len; toint(s,x,len); int p=1,flag=0; while(pri[p]