poj2635 大数模运算
来源:互联网 发布:淘宝帐号出售 编辑:程序博客网 时间:2024/05/23 01:16
这个题的大数处理技巧挺值得学习的。
比如说一个数9876543210097,把它转化为本题所说的千进制就是 th[5]=9,th[4]=876,th[3]=543,th[2]=210,th[1]=097;
然后这个数就变成了千进制的th[5] th[4] th[3] th[2] th[1;
大数处理技巧说完了,也就没什么了,还有一个素数表,我相信,你肯定会!
代码如下:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define MAX 1000010using namespace std;int L;char ch[111];int len,klen;int th[50];int u[MAX],su[MAX];void init() //素数表,su[]记录素数{ int i,j,num=1; memset(u,1,sizeof(u)); for(i=2;i<=MAX;i++) { if(u[i]) su[num++]=i; for(j=1;j<num;j++) { if(i*su[j]>MAX) break; u[i*su[j]]=0; if(i%su[j]==0) break; } }}void trans() //将大数转化为千进制。{ int i,j=0; memset(th,0,sizeof(th)); len=0; while(ch[j++]) {len++;} for(i=0;i<len;i++) { int k=(len-i+2)/3; th[k]=th[k]*10+ch[i]-'0'; } klen=(len+2)/3;}int work(int prime) //判断素数是否是该大数的因子{ int i,j; int mod=0; for(i=klen;i;i--) { mod=(mod*1000+th[i])%prime; } if(mod) return 0; else return 1;}int main(){ int i; init(); while(cin>>ch>>L&&L) { int flag=0; trans(); for(i=1;su[i]<L;i++) { flag=work(su[i]); if(flag) { cout<<"BAD "<<su[i]<<endl; break; } } if(!flag) cout<<"GOOD"<<endl; } return 0;}
0 0
- poj2635 大数模运算
- 大数模运算相关资料
- poj-1845(大数模运算)
- 【模逆元】大组合数模运算 _CDTemplate
- 〖数学算法〗大数模幂运算快速算法
- 〖数学算法〗大数模幂运算快速算法
- hdu 2035 大数模
- 大数模余
- 大数模小数
- poj2635
- poj2635
- poj2635
- poj2635
- poj2635
- poj2635
- poj2635
- poj2635
- POJ2635
- UIView的主要属性
- ConcurrentHashMap
- @class 与#import
- 用超链接传递数组或get方式
- vb 操作webBrowser的dom
- poj2635 大数模运算
- PCL_OpenNI安装
- [LeetCode] Search in Rotated Sorted Array II
- OpenVPN多处理之-多队列TUN多实例
- 使用CocoaPods管理依赖库
- Fighting
- 在IE浏览器将网页中的附件保存至本地时,文件名字变为乱码
- 【Nutch2.2.1基础教程之2.2】集成Nutch/Hbase/Solr构建搜索引擎之二:内容分析
- poj 1338 Ugly Numbers(丑数模拟)