为什么UKE
查看原帖
为什么UKE
1037440
0Io_oI0楼主2024/10/1 15:02

自测是对的,是SPOJ出什么问题了吗

#include<bits/stdc++.h>
#define ll long long 
using namespace std;
int n;
ll t;
int primes[19]={2,3,5,7,11,13,17,19,23,29,31,37};
ll poww(ll a,ll b,ll c){
    ll ans=1;__int128 base=a;
    while(b){
        if(b&1)ans=ans*base%c;
        base=base*base%c;
        b>>=1;
    }
    return ans;
}
bool miller_rabin(ll n){
    for(int i=0;i<=8;i++){
        if(primes[i]==n)return 1;
        else if(primes[i]>n)return 0;
        ll t=poww(primes[i],n-1,n),x=n-1;
        if(t!=1)return 0;
        while(t==1&&x%2==0){
            x/=2;
            t=poww(primes[i],x,n);
            if(t!=1&&t!=n-1)return 0;
        }
    }
    return 1;
}
int main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    scanf("%lld",&n);
    while(n--){
    	scanf("%lld",&t);
		if(miller_rabin(t))puts("YES");
		else puts("NO");
	}
    return 0;
}
2024/10/1 15:02
加载中...