51nod1008N的阶乘

来源:互联网 发布:汽车行业制图软件 编辑:程序博客网 时间:2024/05/22 15:32
1008 N的阶乘 mod P
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
 收藏
 关注
输入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的结果。
Input示例
10 11
Output示例


10


这里主要是用了同余定理记住2个公式

(a+b)%m=(a%m+b%m)%m    a*b%m=(a%m*b%m)%m 



如果你用最简单的方法写,只能过三组数据。当阶乘的数足够大的时候,数据就会爆掉。
所以这一题还是要用同余定理来写,(a+b)%m=(a%m+b%m)%m    a*b%m=(a%m*b%m)%m 
  1.   for(LL i=1;i<=n;++i)  
  2.         {  
  3.             sum=sum%p*i%p;   
  4.         }  
  5. 这一部分的原型是sum%p=(sum%p*i%m)%m.形如a*b%m=(a%m*b%m)%m 
[cpp] view plain copy
print?
  1. #include<cstdio>  
  2. #define LL long long   
  3. int main()  
  4. {  
  5.     LL n,p;  
  6.     scanf("%lld%lld",&n,&p);   
  7.     if(n==0)  
  8.     {  
  9.         printf("%lld\n",1%p);   
  10.     }   
  11.     else  
  12.     {  
  13.         LL sum=1;  
  14.         for(LL i=1;i<=n;++i)  
  15.         {  
  16.             sum=sum%p*i%p;   
  17.         }  
  18.         printf("%lld\n",sum);   
  19.     }   
  20.            
  21.     return 0;   
  22. }