输入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
同余定理:(a+b)%m=(a%m+b%m)%m
a*b%m=(a%m*b%m)%m
证明:
设 a = k1*m+r1 , b = k2*m + r2;
则(a+b)%m = ((k1*m+r1)+(k2*m+r2))%m
= ((k1+k2)*m+(r1+r2))%m
= (r1+r2)%m
= (a%m+b%m)%m;
得到证明;
对于乘法
(a * b) % m = ((a % m) * (b % m)) % m;
设 a = k1*m+r1 , b = k2*m + r2;
则(a * b) % m = ((k1*m+r1 )*(k2*m + r2))%m
= ((k1*k2)*m²+(((k1*r2)+(k2*r1))*m + r1*r2)%m
= (r1*r2)%m
= ((a%m)*(b%m))%m;
结论成立;
#include<stdio.h>
int main(void)
{
long long sum=1,i,a,b;
scanf("%lld%lld",&a,&b);
for(i=1;i<=a;i++)
{
sum=sum%b*i%b;
}
printf("%lld",sum);
return 0;
}