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 ",ans); } return 0; }