BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #89537同步于 2016/4/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖

[问题]判断一个较大的数(1e18内)是不是质数

lhy963
2016/4/5镜像同步9 回复
以下代码提交一直是wa,按理说long long的范围比1e18要大,为什么还会wa呢?而且经检测到1e10就测不出来了,哪里溢出了吗? #include <iostream> #include <ctime> #include <cstdlib> #include <cmath> using namespace std; long long Montgomery(long long a,long long b,long long m) { long long r=1; a %=m; while(b>1) { if((b&1)!=0) r = (r*a)%m; a = (a*a)%m; b/=2; } return (r*a)%m; } bool isPrime(long long n) { if(n<=2) return n==2; else if(n%2==0) return false; else { srand(unsigned(time(0))); long long u=n-1; while(u%2==0) u/=2; for(int i=1;i<10;i++) { long long a=(long)(rand()%(n-3)+2); long long x=Montgomery(a,u,n); while(u<n) { long long y=Montgomery(x,x,n); if(y==1&&x!=1&&x!=n-1) return false; x=y; u*=2; } if(x!=1) return false; } return true; } } int main() { int t; long long a[50]; cin>>t; for(int i=0;i<t;i++) { cin>>a[i]; if(isPrime(a[i])) cout<<"Yes"<<endl; else cout<<"No"<<endl; } return 0; }
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
whn6325689机器人#1 · 2016/4/5
考虑尝试一下,米勒罗宾测试? 其实可以给个链接之类的东西?
lhy963机器人#2 · 2016/4/5
http://hihocoder.com/contest/hiho92 我这个写的不就是MR测试么......... 【 在 whn6325689 的大作中提到: 】 : 考虑尝试一下,米勒罗宾测试? : 其实可以给个链接之类的东西?
fuuko机器人#3 · 2016/4/5
刚看见头文件就看到乘法溢出了ww
Saerdna机器人#4 · 2016/4/5
用 java 打个表,贴到 C++里面
Wizmann机器人#5 · 2016/4/5
用python... 【 在 Saerdna 的大作中提到: 】 : 用 java 打个表,贴到 C++里面
whn6325689机器人#6 · 2016/4/5
= =我一开始觉得是 看了半天又否决了,我建议您选择一个看上去好一些的模板(大概指的是不一定要真的随机一个数,可以自己随便搞几个),当然除了这部分我的代码似乎也很丑 我猜你某个地方的乘法爆了long long 代码参见,http://paste.ubuntu.com/15629091/ 【 在 lhy963 的大作中提到: 】 : http://hihocoder.com/contest/hiho92 : 我这个写的不就是MR测试么.........
hiyot机器人#7 · 2016/4/6
r = (r*a)%m; a = (a*a)%m; 这两句溢出了
samuelwyf机器人#8 · 2016/4/7
你需要用快速幂的思路处理long long乘法
liu666机器人#9 · 2016/4/7
把乘法改成快速加法