AT_joisc2007_factor 階乗 (Factorial) 题解
TimelessWelkin · · 题解
观察数据范围可以发现
不难发现,若从
这是题解区域里面前面大佬们的做法,但不难发现如果
代码如下:
#include<bits/stdc++.h>
using namespace std;
bool isprime(int x){
for(int i=2;i*i<=x;i++)
if(x%i==0)return false;
return true;
}
int main(){
int n,m;
scanf("%d",&n);m=n;
if(isprime(n)){
printf("%d\n",n);
return 0;
}
for(int i=1;i<=m;i++){//从1开始枚举,至多到n(显然到不了)
if(i%n==0){
printf("%d\n",i);
return 0;
}
if(__gcd(n,i)!=1){
n/=__gcd(n,i);
if(isprime(n) && n>i){//如果是质数且质数>i则输出该质数
printf("%d\n",n);
return 0;
}
}
}
}