题目描述
n 的阶乘记为 n!,定义如下:
n!=1×2×⋯×n
给定两个正整数 n 与 m,请计算 n! 除以 m 的余数。
输入格式
第一行:两个整数表示 n 与 m。
输出格式
单个整数:表示 n! 除以 m 的余数。
说明/提示
对于 30% 的数据,1≤n≤10;
对于 60% 的数据,1≤n,m≤10000;
对于 100% 的数据,1,000,0001≤n,m≤1,000,000;
错误答案:
#include <bits/stdc++.h>
using namespace std;
int main(){
long long n,m,k=1;
cin>>n>>m;
for (long long i=2;i<=n;i++){
k*=i;
cout<<k<<" ";
cout<<i<<endl;
}cout<<k%m;
return 0;
}
正确答案:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m,ans=1;
cin>>n>>m;
for(int i=1;i<=n;i++)
ans=(ans*i)%m;
cout<<ans;
return 0;
}
错误分析:
这道题里的最后一行:对于 100% 的数据,1,000,0001≤n,m≤1,000,000;可以看出来这道题答案的值很大,用long long也会炸的。所以像我一样刚开始用long long是不对的。此时就要用数学里的一个方法来化解它。