做题总结——王母娘娘又双叒叕来难为茶山牛了
原题链接
题目
题意分析:
这道题目是求一个正整数的三次阶乘取模的值,涉及到了数据溢出的问题
做题思路:
-
这到题目如果利用暴力的方法,即先求出来三次阶乘的值再取模,数据肯定会溢出。
-
根据题目可以看到m的最大取值是1e9,则根据经验可以知道4的三次阶乘肯定是远远大于1e9的,也就是说当n>=4时,(n!!!)%m一定是等于0的(因为n!!!远大于m);当n=3时,求出3!!!再对m进行取模即可;当0<=n<=2时,n!!!=n,此(n!!!)%m=n%m,这样本道即可解决
代码实现
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t,n,m,i;
cin>>t;
while(t--)
{
cin>>n>>m;
if(n<=2)
{
cout<<n%m<<endl;
}
else if(n>=4)
{
cout<<"0"<<endl;
}
else
{
long long sum=1;
for(i=1;i<=720;i++)
{
sum*=i;
sum%=m;
}
cout<<sum<<endl;
}
}
return 0;
}
做题收获
-
做题时要注意所给数据的范围,一些看似复杂的问题可能会因为数据范围比较小,而想到一些比较巧妙地解法,,从而达到事半功倍地效果
-
记忆一些常见整数地阶乘值,在做题时可能会有一些意想不到的好处
我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=1459rh1icdi42