牛客小白月赛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;
}
寻找真正的热爱

浙公网安备 33010602011771号