QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#478408 | #249. Miller Rabin 算法 | Williamxzh# | WA | 132ms | 3604kb | C++23 | 846b | 2024-07-14 22:28:12 | 2024-07-14 22:28:12 |
Judging History
answer
#include <bits/stdc++.h>
#define il inline
#define B __int128
using namespace std;
typedef long long ll;
il B qp(ll a,ll b,ll mod){
B ans=B(1),base=B(a);
while(b){
if(b&1) ans=(ans*base)%mod;
base=(base*base)%mod,b>>=1;
}return ans;
}
ll n,m;int k,ck;
ll x,y,z;B u,v,w;
int main(){
mt19937_64 rnd(time(0));
while(cin>>n){
if(n==1){puts("N");continue;}
if(n<=3 || n==5 || n==7){puts("Y");continue;}
if(n<=10){puts("N");continue;}
m=n-1ll,k=0,ck=1;
while(!(m&1)) m>>=1,++k;
for(int i=1;i<=20;++i){
x=rnd()%n+1,u=qp(x,m,n);
for(int j=1;j<=k;++j){
u=(u*u)%n;
if(u!=1 && u!=n-1){ck=0;break;}
}if(!ck) break;
}
puts(ck?"Y":"N");
}
return 0;
}
详细
Test #1:
score: 0
Wrong Answer
time: 132ms
memory: 3604kb
input:
996581938833575363 971646509461160317 773155992127361153 161603952726515268 540879144500456953 476831214764178553 784255927154201144 671096087619405061 805545190025269709 339546334309245137 337726347922962343 222956293307015293 809183111090275843 799050063298926344 691718101820598109 646220213113313...
output:
N Y N Y N N Y Y Y N Y Y Y Y Y N Y Y Y Y N Y Y N Y Y Y N Y N N N Y N Y Y Y Y Y Y Y Y Y Y Y N Y Y N Y N Y Y Y Y Y Y Y N Y Y Y Y Y Y Y Y Y N N Y N Y N Y Y N Y N N Y Y Y N N Y Y Y Y N N Y Y Y N N N Y Y N Y N Y N Y Y N Y N Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y N Y Y N Y Y Y Y N Y Y Y Y Y Y Y Y N Y Y Y Y Y Y Y ...
result:
wrong answer 3rd lines differ - expected: 'Y', found: 'N'