1. 程式人生 > >快速冪的類似問題(51Nod 1008 N的階乘 mod P)

快速冪的類似問題(51Nod 1008 N的階乘 mod P)

下面我們來看一個容易讓人蒙圈的問題: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 = 10

Input 兩個數N,P,中間用空格隔開。(N < 10000, P < 10^9) Output 輸出N! mod P的結果。 Sample Input
10 11
Sample 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));
}