51nod1008 N的阶乘 mod P(水题)
题目简单来说就是:
输入两个数N和P (N < 10000, P < 10^9),求N! Mod P =?
一道水题两次都WA了,仔细检查后发现是for循环体出点问题,需要 s 先乘 i 后在对 p 取余,而不是 i 先对 p 取余后再乘 s ,后者结果是错误的。比如2×(3%2)=2,而(2×3)%2=0.
代码:
#include <iostream>
#include <algorithm>
using namespace std;
long long mod(long long n,long long p)
{
long long s;
s=1;
for(long long i=1;i<=n;i++)
{
//i=i%p;
// s*=i;
/*这样会出错,(s*i)%p和s*(i%p)结果不一样 */
s=(s*i)%p;//正确写法
}
return s%p;
}
int main()
{
long long n,p,i;
cin>>n>>p;
cout<<mod(n,p)<<endl;
return 0;
}