牛客小白月赛23 阶乘

https://ac.nowcoder.com/acm/contest/4784/B

这题其实不难,考虑一下什么情况会让答案很大?

如果我想枚举,当p是一个很大的素数的时候就不行了,所以先下手为强,看看p/i是不是素数。

具体看代码就行,难度不大

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int jude(int x){
	for(long long i = 2;i*i<=x;i++){
		if(x % i == 0) return 0;
	}
	return 1;
} 
int main(){
	int t;
	long long p;
	scanf("%d",&t);
	while(t--){
		scanf("%lld",&p);
		long long n = 1;
		long long ans = 0;
		for(int i=1;;i++){
			n *= i;
			if(n % p == 0){
				ans = i;
				break;
			}
			if(p % i == 0 && p/i != i){
				if(jude(p/i)){
					ans = max(p/i,(long long)i);
					break;
				}
			}
			n %= p;
		}
		printf("%lld\n",ans);
	} 
	return 0;
} 

  

猜你喜欢

转载自www.cnblogs.com/lesning/p/12543420.html
今日推荐