您的位置:首页 > 其它

sicily 1231 The Embarrassed Cryptography

2011-05-31 23:33 274 查看
这道题主要用到了一个筛法求素数,大数的模运算,以及暴力搜索的方法.....题意比较简单,关键要注意到大数的模运算问题!

// source code of submission 784711, Zhongshan University Online Judge System
#include <iostream>
#include <string>
#include <malloc.h>
using namespace std;

int prime(int a[],int n)              //筛法求n以内的素数
{
int i,j,k,x,num,*b;
n++;
n/=2;
b=(int *)malloc(sizeof(int)*(n+1)*2);
a[0]=2;a[1]=3;num=2;
for(i=1;i<=2*n;i++)
b[i]=0;
for(i=3;i<=n;i+=3)
for(j=0;j<2;j++)
{
x=2*(i+j)-1;
while(b[x]==0)
{
a[num++]=x;
for(k=x;k<=2*n;k+=x)
b[k]=1;
}
}
return num;
}
bool is_mod(string s,int n)           //运用大数的模运算来判断是否能整除(本题的亮点)
{
int ans = 0;
for(int i = 0;i < s.size();i++)
ans = (int) (((long)ans*10 + (s[i]-'0')) % n);
if(ans == 0)    return 1;
else            return 0;
}
int main()
{
int k,l,i,res,ok;
int p[100010]; string s;
int num = prime(p,1000000);
while(cin>>s>>l,(s[0]!='0'||l))
{
ok = 1;
for(i = 0;i<num;i++)
if(p[i]<l&&is_mod(s,p[i]))  { res = p[i]; ok = 0; break;}
if(!ok)        cout<<"BAD"<<" "<<res<<endl;
else           cout<<"GOOD"<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: