super_log 【欧拉降幂】

#include 
using namespace std;
#define maxn 1000010
#define Maxn maxn+10
#define maxk 50
typedef long long ll;
ll prime[Maxn],phi[Maxn],pn=0;
bool jud[Maxn];
void init(){
	phi[1]=1;
	for(int i=2;i<=maxn;i++){
		if(!jud[i]){
			prime[++pn]=i;phi[i]=i-1;
		}
		for(int j=1;j<=pn;j++){
			ll cnt=i*prime[j];
			if(cnt>maxn)break;
			jud[cnt]=true;
			if(i%prime[j]==0){
				phi[cnt]=phi[i]*prime[j];break;
			}
			else{
				phi[cnt]=phi[i]*(prime[j]-1);
			}
		}
	}
}
ll f_pow(ll x,ll p,ll mod)
{
	ll ans=1;
	while(p){
		if(p%2==1){
			ans*=x;ans%=mod;
		}
		x*=x;x%=mod;p/=2;
	}
	return ans;
}
ll solve(ll a,ll b,ll p){
	if(p==1)return 0;
	if(b==0)return 1;
	ll P=solve(a,b-1,phi[p]);
	/*printf("b=%lld P=%lld p=%lld\n",b,P,p);*/
	if(P

你可能感兴趣的:(2019,ICPC,南京网络赛)