POJ 2635 高精度MOD 和 乱搞的进制转换

来源:互联网 发布:知乎如何将答案离线 编辑:程序博客网 时间:2024/06/18 08:56

转换成 10000 进制的可以少做很多次 % , 然后就 AC了。

不然 TLE

#include <iostream>#include <stdio.h>#include <algorithm>#include <string.h>#include <queue>#include <map>#include <set>using namespace std;#define MAX 1100000 #define INF 0x3f3f3f3f#define MS(x) memset(x,0,sizeof(x))#define ll long long#define P pair<int,int>#define fst first#define sec second#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1vector<int> prim;char s[300];long long num[200];int L;int numLen;bool noprim[MAX];void setNum(){MS(num);int len=strlen(s);int j=-1;for(int i=0;i<len;i++){if(i%4==0)j++;num[j]=num[j]*10+(s[i]-'0');}numLen=j+1;}void getPrim(){for(int i=2;i<MAX;i++){if(!noprim[i]){prim.push_back(i);for(int j=2;j*i<MAX;j++)noprim[j*i]=1;}}}long long mod(int n){long long yu=0;for(int i=0;i<numLen;i++){yu=(yu*10000+num[i])%n;}return yu;}int solve(){for(int i=0;prim[i]<L;i++){if(mod(prim[i])==0)return prim[i];}return 0;}int main(){getPrim();//freopen("acm.in","r",stdin);while(scanf("%s%d",s,&L)!=EOF&&L!=0){if(!L)return 0;setNum();int res=solve();if(!res)cout<<"GOOD"<<endl;elsecout<<"BAD"<<" "<<res<<endl;}return 0;}


0 0
原创粉丝点击