样例过了,求大佬调
查看原帖
样例过了,求大佬调
1476677
llll123321楼主2024/10/23 22:38

样例过了自己试验了几组数据也过了,求大佬调。

#include<bits/stdc++.h>
using namespace std;
int jc[20]={0,2,3,5,7,11,13,17,37,24251};
long long mul(long long a,long long b,long long mod)
{
	long long ans=0;
	while(b)
	{
		if(b&1) ans=(ans+a)%mod;
		a=(a+a)%mod;
		b>>=1;
	}
	return ans;
}
long long qpow(long long a,long long b,long long mod) 
{
	long long ans=1;
	while(b)
	{
		if(b&1) ans=(ans*a)%mod;
		a=mul(a,a,mod);
		b>>=1;
	}
	return ans;
}
bool MRtest(long long n)
{
	if(n<3||n%2==0) return (n==2);
	long long u=n-1,cnt=0;
	if(u%2==0)
	{
		u>>=1;
		cnt++;
	}
	for(int i=1;i<=9;i++)
	{
		long long v=qpow(jc[i],u,n);
		if(v==0||v==n-1||v==1) continue;
		for(int j=1;j<=cnt;j++)
		{
			v=qpow(v,2,n);
			if(v==n-1&&j!=cnt) {v=1;break;}
			if(v==1) return false;
		}
		if(v!=1) return false;
	}
	return true;
}
int main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		int a;
		cin>>a;
		if(MRtest(a)) 
		{
			cout<<"YES"<<endl;
			continue;
		}
		cout<<"NO"<<endl;
	}
	return 0;
}



2024/10/23 22:38
加载中...