求助:过了样例,提交又WA又T还MLE
查看原帖
求助:过了样例,提交又WA又T还MLE
448884
快乐的大童楼主2022/1/23 20:11
#include<iostream>
#include<cstdio>
#define int long long
using namespace std;
const int N=1e7+5;
int phi[N],a[N],cnt,p;
bool vis[N];
inline int ksm(int a,int b,int mod){
	int res=1,x=a;
	while(b){
		if(b&1) res=(res*x)%mod;
		x=(x*x)%mod;
		b>>=1;
	}
	return res;
}
inline int get_ans(int mod){
	return (mod==1)?0:ksm(2,get_ans(phi[mod])+phi[mod],mod);
}
inline void pre(int n){
	phi[1]=1;
	vis[1]=1;
	for(int i=2;i<=n;i++){
		if(!vis[i]){
			a[++cnt]=i;
			phi[i]=i-1;		
		}
		for(int j=1;j<=cnt&&i*a[j]<=n;i++){
			if(i%a[j]==0){
				phi[i*a[j]]=phi[i]*a[j];
				break;
			}else{
				phi[i*a[j]]=phi[i]*(a[j]-1);
			}
		}
	}
}
int t,n;
signed main(){
	pre(1e6);
	scanf("%lld",&t);
	while(t--){
		scanf("%lld",&p);
		printf("%lld\n",get_ans(p));
	}
}
2022/1/23 20:11
加载中...