BZOJ3884 欧拉函数

https://www.lydsy.com/JudgeOnline/problem.php?id=3884

时隔几个月,又做了一遍这道题

发现这题是真的经典

如果最大公因数不是1的化简取模运算

AC代码:

#include
using namespace std;
typedef long long ll;
const ll N=1e7;
ll quickmod(ll a,ll b,ll m){
    ll ans=1;
    while(b){
        if(b&1) ans=(ans*a)%m;
        b>>=1;
        a=a*a%m;
    }
    return ans;
}
ll phi(ll x){
    ll ans=x;
    for(ll i=2;i*i<=x;i++){
        if(x%i==0){
            ans=ans/i*(i-1);
            while(x%i==0) x/=i;
        }
    }
    if(x>1) ans=ans/x*(x-1);
    return ans;
}
ll dfs(ll x){
    if(x==1)
        return 0;
    if(x==2)
    	return 0;
    ll y=0;
    while((x&1)==0){
        x/=2;
        ++y;
    }
    return quickmod(2,(dfs(phi(x))-y%phi(x)+phi(x))%phi(x),x)*(1<>T;
    while(T--){
        ll p;
        cin>>p;
        cout<

你可能感兴趣的:(数论)