poj 2635 大数模运算(内有打素数表的模板,大树求余分解公式)
2012-06-25 10:37
483 查看
题意:求正整数K(4 <= K <= 10100)是否有一个素因子是比L(2 <= L <= 106)小的。
思路:大数模运算,让比L小的所有素数去除K,如果余数为0则表示存在。先预处理打一张素数表,然后对K按10000进制进行分解,(按1000~1000000000进制都是可行的,其中1000跑了800多MS,100进制就TLE了),然后按照公式(A+B)%C = ((A%C)+(B%C))%C进行模运算。
思路:大数模运算,让比L小的所有素数去除K,如果余数为0则表示存在。先预处理打一张素数表,然后对K按10000进制进行分解,(按1000~1000000000进制都是可行的,其中1000跑了800多MS,100进制就TLE了),然后按照公式(A+B)%C = ((A%C)+(B%C))%C进行模运算。
#include <stdio.h> #include <iostream> using namespace std; const int nMax = 1000010; const int mMax = 80000; typedef __int64 LL; bool p[nMax]; int pri[mMax]; int cnt, num[50]; void priList(){ // 打素数表的模板。 int i, j; memset(p, true, sizeof(p)); for(i = 2; i * i < nMax; i ++) if(p[i]){ for(j = i << 1; j < nMax; j += i) p[j] = false; } for(j = 0, i = 2; i < nMax; i ++) if(p[i]) pri[j ++] = i; } int mod(int Mod){ // 判断K除以素数Mod的余数。 LL ans = 0; for(int i = cnt; i >= 0; i --) ans = (ans*10000 + num[i]) % Mod; return (int)ans; } int main(){ char K[102]; int L,i,k; priList();//素数打表 while(scanf("%s%d", K, &L) && L){ memset(num,0,sizeof(num)); cnt=0; for(k=1,i=strlen(K)-1;i>=0;i--,k*=10){ if(k==10000){ k=1; cnt++; } num[cnt]+=(K[i]-'0')*k;//大数分解为sum(num[i]*1万^i),i(0~cnt) } bool flag=false; for(i=0;pri[i]<L;i++) if(mod(pri[i])==0){ flag=true; break; } if(flag) printf("BAD %d\n", pri[i]); else printf("GOOD\n"); } system("PAUSE"); return 0; }
相关文章推荐
- poj 1811 随机素数和大数分解(模板)
- poj 1811 随机素数和大数分解(模板)
- POJ 2635 The Embarrassed Cryptographer [高精度求余+同余模定理]【数论】
- POJ 3641 -- 快速幂运算,素数判定
- POJ-2635 The Embarrassed Cryptographer 万进制+素数筛选
- poj1845(唯一分解定理,等比数列求和,约数个数公式)
- POJ 2429 -- miller-rabin素数测试,Pollard_rho素因子分解
- poj 1811 + poj 2429 (Miller_Rabin大素数测试 + Pollard_Rho大合数分解)
- POJ 1811 Prime Test(素数测试和分解)
- 距离产生美之大素数的分解运算
- [ACM] POJ 2635 The Embarrassed Cryptographer (同余定理,素数打表)
- POJ1811_Prime Test【Miller Rabin素数測试】【Pollar Rho整数分解】
- POJ 1811 Prime Test【大素数判定】【素因子分解】
- POJ 1845-Sumdiv(快速幂取模+整数唯一分解定理+约数和公式+同余模公式)
- 素数表的快速建立,合数分解,1-2^31内某个长度小于10w的区间素数筛选的三个模板及解析
- POJ 2635 The Embarrassed Cryptographer(素数筛+高精度求模+同余模)
- POJ 1811 Prime Test(大素数判断和素因子分解)
- POJ-2002 Squares,哈希模板+数学公式!
- poj 2635(The Embarrassed Cryptographer(把…译成密码) 素数打表的最优方法+10进制转换成1000进制,大数取模
- poj 1811 Prime Test(大素数判定和素因子分解)