题意:求n的最大素因数
终于红名啦~~~
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const int maxn=1000005;
bool valid[maxn];
int prime[maxn];
void getprime(int n,int &tot,int ans[maxn])
{
memset(valid,1,sizeof(valid));
for(int i=2;i<=n;++i){
if(valid[i]){
tot++;
ans[tot]=i;
}
for(int j=1;((j<=tot)&&(i*ans[j]<=n));j++){
valid[i*ans[j]]=false;
if(i%ans[j]==0)break;
}
}
}
int factot(int n,int tot)
{
int tmp,i,now;
tmp=(int)((double)sqrt(n)+1);
now=n;
int ret=0;
for(i=1;i<=tot;++i){
if(now%prime[i]==0){
while(now%prime[i]==0){
ret=max(ret,prime[i]);
now/=prime[i];
}
}
}
if(now!=1)ret=max(ret,now);
return ret;
}
int main()
{
// freopen("data.txt","r",stdin);
int tot=0;
getprime(maxn,tot,prime);
int n;
while(scanf("%d",&n)!=EOF)
{
int ans=factot(n,tot);
printf("%d\n",ans?n/ans:0);
}
return 0;
}