QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#341774 | #249. Miller Rabin 算法 | SoyTony# | WA | 4ms | 3700kb | C++14 | 960b | 2024-02-29 21:16:53 | 2024-02-29 21:16:53 |
Judging History
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: 3700kb
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'