QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#341771#249. Miller Rabin 算法SoyTony#WA 4ms3764kbC++14960b2024-02-29 21:15:222024-02-29 21:15:22

Judging History

This is the latest submission verdict.

  • [2024-02-29 21:15:22]
  • Judged
  • Verdict: WA
  • Time: 4ms
  • Memory: 3764kb
  • [2024-02-29 21:15:22]
  • Submitted

answer

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;

ll q_pow(int A,ll B,ll P){
    ll res=1;
    while(B){
        if(B&1) res=(__int128_t)res*A%P;
        A=(__int128_t)A*A%P;
        B>>=1;
    }
    return res;
}

bool check(int A,ll P){
    ll D=P-1;
    ll pw=q_pow(A,D,P);
    if(pw!=1) return false;
    while(!(D&1)){
        D>>=1;
        pw=q_pow(A,D,P);
        if(pw==P-1) return true;
        else if(pw!=1) return false;
    }
    return true;
}
bool MillerRabin(ll P){
    if(P>19){
        for(int A:{2,3,5,7,11,13,17,19}){
            if(!check(P,A)) return false;
        }
        return true;
    }
    else{
        for(int A:{2,3,5,7,11,13,17,19}){
            if(P==A) return true;
        }
        return false;
    }
}

int main(){
    ll P;
    while(scanf("%lld",&P)!=EOF){
        if(MillerRabin(P)) printf("Y\n");
        else printf("N\n");
    }
    return 0;
}

詳細信息

Test #1:

score: 0
Wrong Answer
time: 4ms
memory: 3764kb

input:

996581938833575363
971646509461160317
773155992127361153
161603952726515268
540879144500456953
476831214764178553
784255927154201144
671096087619405061
805545190025269709
339546334309245137
337726347922962343
222956293307015293
809183111090275843
799050063298926344
691718101820598109
646220213113313...

output:

Y
N
N
N
N
N
N
N
Y
N
N
Y
N
N
N
N
Y
N
N
N
N
Y
N
N
N
N
N
N
Y
N
N
N
N
N
N
N
N
N
Y
N
N
N
N
N
N
Y
N
N
N
N
Y
N
N
N
Y
N
N
N
N
N
Y
N
N
N
N
Y
N
Y
N
N
N
N
N
N
N
N
N
N
N
N
N
Y
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
Y
Y
N
N
N
N
N
N
N
Y
Y
N
N
N
Y
N
N
N
N
N
N
N
Y
N
N
N
N
N
N
N
N
N
N
N
N
Y
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
...

result:

wrong answer 1st lines differ - expected: 'N', found: 'Y'