欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

51nod1008 N的阶乘 mod P(水题)

程序员文章站 2024-03-15 18:49:48
...

题目简单来说就是:
输入两个数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;
}
相关标签: n的阶乘