已知正整數n是兩個不同的質數的乘積,試求出兩者中較大的那個質數。
n<2e9,打個1e5的素數表就夠了
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn=1e5+100;
bool vis[maxn];
int prime[maxn];
int cnt;
void getprime();
int main()
{
getprime();
int n;
while(scanf("%d",&n)!=EOF)
{
int ans;
for(int i=0;i<cnt;i++)
if(n%prime[i]==0)
{
ans=n/prime[i];
break;
}
cout<<ans<<endl;
}
return 0;
}
void getprime()
{
memset(vis,0,sizeof(vis));
cnt=0;
for(int i=2;i<maxn;i++)
{
if(!vis[i]) prime[cnt++]=i;
for(int j=0;j<cnt&&i*prime[j]<maxn;j++)
{
vis[prime[j]*i]=true;
if(i%prime[j]==0) break;
}
}
}