QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#478408#249. Miller Rabin 算法Williamxzh#WA 132ms3604kbC++23846b2024-07-14 22:28:122024-07-14 22:28:12

Judging History

你现在查看的是最新测评结果

  • [2024-07-14 22:28:12]
  • 评测
  • 测评结果:WA
  • 用时:132ms
  • 内存:3604kb
  • [2024-07-14 22:28:12]
  • 提交

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;
}

Details

Tip: Click on the bar to expand more detailed information

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'