HDU4335 尤拉函式及降冪

2022-08-02 06:18:11 字數 1577 閱讀 7714

求滿足$n^\equiv b $(mod p)的n的數量。

思路:n!太大了,這一題要用到降冪公式:

所以可以把n的取值分為三部分。

1:n≤phi(c),這部分直接暴力

2:當n!%phi(c)=0時,(n+1)!%phi(c)=0,這時公式可化為求a^(phi(c))

所以第二部分是n!%phi(c)!=0時,也是暴力。

3:最後一部分由於冪指數不變,根據鴿巢原理求出其迴圈節然後算出貢獻。

注意特判p為1的情況(p為1時,m可能爆ull)

#include#include

#include

#include

#include

#include

#include

#include

#include

#define ll unsigned long long

#define pi acos(-1.0)

#define f first

#define s second

#define pb push_back

#define debug(x); printf("debug%lld\n",x);

#define des(x); printf("des:%s\n",x+1);

const ll inf=0x3f3f3f3f3f3f3f3f

;const

int inf=0x3f3f3f3f;//

const ll mod=1e9+7;

ll mod;

using

namespace

std;

intt;

ll m,b,p;

const

int n=1e5+5

;ll num[n];

ll oula(ll x)}}

if(x>1

) temp=temp/x*(x-1

);

return

temp;

}ll quickpow(ll x,ll n)

res=res*res%mod;

n=n>>1

; }

return

ans;

}int

main()

else

printf(

"%i64u\n

",m+1

);

continue

; }

for(i;i<=m&&fac<=phi;i++)

fac*=(i+1

); }

fac%=phi;

for(i;fac&&i<=m;i++)

if(i<=m)

}ll total=(m-i+1)/p;

ans+=total*cnt;

total=(m-i+1)%p;

for(ll j=0;j)

}printf(

"%i64u\n

",ans);

}return0;

}

view code

hdu4335 降冪公式 模迴圈節

大意找出多少個n滿足下式 範圍如此之大啊。結果做法是暴力,囧。要用到乙個降冪公式 注意括號裡的條件,那麼當n比較小的時候,就不能用這個了,n比較小,肯定是暴力嘛。那麼第乙個階段便是當n比較小,n 小於phi p 直接暴力求解。當n 大於phi p 的時候,便 可以用上面的降冪公式。還得繼續暴力,發現...

尤拉函式,擴充套件尤拉降冪

尤拉函式 phi n 表示下於n且與n互質的整數的個數。模板 include include include define il inline define maxn 200100 include define ll long long using namespace std 這個函式是求1 n內小...

尤拉函式與尤拉降冪

尤拉函式 對於正整數 n 尤拉函式是小於或等於 n 的正整數中與 n 互質的數的數目。varphi 1 1 除了1之外,所有正整數與它本身都不互質 對於質數 p varphi p p 1 sum varphi d n 其中 d 是 n 的因數 尤拉函式是積性函式,若 m,n 互質,則有 varphi...