51nod 1008 N的阶乘 mod P
Posted 浅忆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51nod 1008 N的阶乘 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的结果。
Input示例
10 11
Output示例
10
如果用普通的方法就会wa,如下所示
1 #include <iostream> 2 #include <stdio.h> 3 using namespace std; 4 int fac(int m){ 5 if(m==1) return 1; 6 return m*fac(m-1); 7 } 8 int main(){ 9 long long n,p,t; 10 scanf("%I64d%I64d",&n,&p); 11 t=fac(n); 12 cout<<t%p<<endl; 13 return 0; 14 }
注意longlong Int 的使用以及边乘边求余(int的最大值不超过3*10^9)
(a×b) mod c=(a mod c * b mod c) mod c
a^n%p=(((a*a%p)*a%p)*a%p) 网上看到的不太懂
1 #include <iostream> 2 using namespace std; 3 int main(){ 4 long long n,p,res=1; 5 cin>>n>>p; 6 for(int i=1;i<=n;i++){ 7 res*=i; 8 res%=p; 9 } 10 cout<<res<<endl; 11 return 0; 12 }
以上是关于51nod 1008 N的阶乘 mod P的主要内容,如果未能解决你的问题,请参考以下文章
51 Nod 1008 N的阶乘 mod PJava大数乱搞