求救,为什么会T
查看原帖
求救,为什么会T
1056514
zky2023楼主2024/2/26 09:00

求各位大佬指教,为什么会T

#include<iostream>
#include<cstdio>
#include<cmath>
#define int long long
using namespace std;
int t,p,i;
int ksm(int a,int b,int mod){
	int ans=1%mod;
	for(;b;b>>=1,a=a*a%mod){
		if(b&1){
			ans=ans*a%mod;
		}
	}
	return ans;
}
int leianha(int x){
	int ans=x;
	for( i=2;i*i<=x;++i){
		if(x%i==0){
			ans=ans*(i-1)/i;
			while(x%i==0){
				x/=i;
			}
		}
	}
	if(x>1){
		ans=ans*(x-1)/x;
	}
	return ans;
}
int f(int p){
	if(p<=2){
		return 0;
	}
	int y=leianha(p);
	return ksm(2,y+f(y),p);
}
signed main()
{
	scanf("%lld",&t);
	for( i=1;i<=t;i++){
		scanf("%lld",&p);
		printf("%lld\n",f(p));
	}
	return 0;
}
2024/2/26 09:00
加载中...