luogu P9707 [KMOI R1] 音波武器 题解

分析

可以发现,当我们求出 \(l!\),只需要乘上 \((l+1)\) 就可以求出 \((l+1)!\)

而因为数据范围太大,需要不断地将 \(sum \bmod k\)

Code

#include<bits/stdc++.h>
using namespace std;
long long l,r,k,sum=1,ans;
int main(){
	cin>>l>>r>>k;
	for(long long i=2;i<=l;i++)
		sum=sum*i%k;//计算l的阶乘的余数
	ans=sum;
	for(long long i=l+1;i<=r;i++){
		sum=sum*i%k;//计算l到r区间的余数
		ans=max(ans,sum);//找最大值
	}
	cout<<ans;
	return 0;
}
posted @ 2025-08-18 19:08  cqbzcjh  阅读(3)  评论(0)    收藏  举报