QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#93313#249. Miller Rabin 算法MoQz#TL 0ms0kbC++14706b2023-03-31 16:55:332023-03-31 16:55:37

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-03-31 16:55:37]
  • 评测
  • 测评结果:TL
  • 用时:0ms
  • 内存:0kb
  • [2023-03-31 16:55:33]
  • 提交

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

詳細信息

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
...

result: