下面我们来看一个容易让人蒙圈的问题: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 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));
}