ybt
通过
测试点 | 结果 | 内存 | 时间 |
测试点1 | 答案正确 | 812KB | 2MS |
测试点2 | 答案正确 | 804KB | 2MS |
测试点3 | 答案正确 | 808KB | 2MS |
测试点4 | 答案正确 | 808KB | 2MS |
测试点5 | 答案正确 | 808KB | 2MS |
测试点6 | 答案正确 | 816KB | 2MS |
测试点7 | 答案正确 | 804KB | 2MS |
测试点8 | 答案正确 | 804KB | 2MS |
测试点9 | 答案正确 | 812KB | 2MS |
测试点10 | 答案正确 | 816KB | 2MS |
LOJ
LUOGU
sqrt(2*10^9)=44722筛出[1,44722]中的质数,该题基本就解决了。
AC代码如下:
#include <bits/stdc++.h>
#define maxn 45000
using namespace std;
int prime[maxn],tot=0,b[maxn];
void linear(int x){
int i,j;
for(i=2;i<=x;i++)b[i]=0;
for(i=2;i<=x;i++){
if(b[i]==0)prime[++tot]=i;
for(j=1;j<=tot&&i*prime[j]<=x;j++){
b[i*prime[j]]=1;
if(i%prime[j]==0)break;
}
}
}
int main(){
int n,p,i;
scanf("%d",&n);
linear(44722);
for(i=1;i<=tot&&prime[i]*prime[i]<=n;i++)
if(n%prime[i]==0){
printf("%d\n",n/prime[i]);
break;
}
return 0;
}