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;
}
全部评论

相关推荐

11-03 13:01
西南大学 Java
mengnankk:28不要投让27的先投,先投带动后投
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务