做题总结——王母娘娘又双叒叕来难为茶山牛了

做题总结——王母娘娘又双叒叕来难为茶山牛了

原题链接

王母娘娘又双叒叕来难为茶山牛了

题目

王母娘娘又双叒叕来难为茶山牛了  题目
题意分析:

这道题目是求一个正整数的三次阶乘取模的值,涉及到了数据溢出的问题

做题思路:

  • 这到题目如果利用暴力的方法,即先求出来三次阶乘的值再取模,数据肯定会溢出。

  • 根据题目可以看到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;
}

做题收获

  • 做题时要注意所给数据的范围,一些看似复杂的问题可能会因为数据范围比较小,而想到一些比较巧妙地解法,,从而达到事半功倍地效果

  • 记忆一些常见整数地阶乘值,在做题时可能会有一些意想不到的好处

1-10的阶乘值

我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=1459rh1icdi42

猜你喜欢

转载自blog.csdn.net/m0_46772594/article/details/108230850
今日推荐