快速冪的類似問題(51Nod 1008 N的階乘 mod P)
阿新 • • 發佈:2018-11-09
下面我們來看一個容易讓人蒙圈的問題:N的階乘 mod P。
51Nod 1008 N的階乘 mod P
看到這個可能有的人會想起快速冪,快速冪是N的M次方 mod P,這裡可能你就要說你不會做了,其實你會,為什麼呢,只要你明白快速冪的原理,你就會發現他們兩個其實差不多是同一個問題。
重要原理:積的取模=取模的積再取模。
快速冪不過是一直乘的相同的的數,這裡僅僅是改成乘以不同的數而已。
題目:
輸入N和P(P為質數),求N! Mod P = ? (Mod 就是求模 %)
例如:n = 10, P = 11,10! = 3628800 3628800 % 11 = 10Input 兩個數N,P,中間用空格隔開。(N < 10000, P < 10^9) Output 輸出N! mod P的結果。 Sample Input
10 11Sample Output
10
下面是程式碼:(要注意如果用int中間可能會溢位,用int提交h會WA)
#include<cstdio> #define ll long long ll quickpow(ll n,ll p){ ll ans=1; for(ll i=1;i<=n;i++){ ans=ans*i%p; } return ans; } int main() { ll n,p; scanf("%lld%lld",&n,&p); printf("%lld",quickpow(n,p)); }