题目简单来说就是:
输入两个数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;
}