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

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

原题链接

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

题目

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

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

做题思路:

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

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值