QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#93313 | #249. Miller Rabin 算法 | MoQz# | TL | 0ms | 0kb | C++14 | 706b | 2023-03-31 16:55:33 | 2023-03-31 16:55:37 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
#define fo(i,a,b) for(int i=a;i<=b;++i)
#define fod(i,a,b) for(int i=a;i>=b;--i)
#define ull __int128
#define ll long long
int z[8]={2,3,5,7,11,13,17,19};
ll ksm(ll x,ll y,ll p){
if(!x)return 1;
ull u=ksm(x/2,y,p);
u=u*u%p;
if(x&1)u=u*y%p;
return u;
}
bool Prime(ll x){
if(x==1)return 0;
ll t=x-1,k=0;
while(t%2==0)t/=2,++k;
fo(i,0,7){
if(x==z[i])return 1;
ull a=ksm(t,z[i],x),b=0;
fo(j,1,k){
b=a*a%x;
if(b==1&&a!=1&&a!=x-1)return 0;
a=b;
}
if(b!=1)return 0;
}
return 1;
}
int main(){
ll n;
while(scanf("%lld",&n)!='EOF'){
if(Prime(n)){
puts("Y");
}
else puts("N");
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Time Limit Exceeded
input:
996581938833575363 971646509461160317 773155992127361153 161603952726515268 540879144500456953 476831214764178553 784255927154201144 671096087619405061 805545190025269709 339546334309245137 337726347922962343 222956293307015293 809183111090275843 799050063298926344 691718101820598109 646220213113313...
output:
N Y Y N Y Y N Y Y Y Y Y Y N Y N Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y N Y Y Y Y Y Y Y Y Y Y Y Y Y N Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y N Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y N Y Y Y Y Y Y Y Y N Y Y N Y Y Y Y Y Y Y N Y Y Y Y Y Y N Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y N Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y ...