Largest prime factor
题目链接
题目大意
求一个数最大质因子是第几个素数。
题解
类似打表的方法求出每个数最大因子。最后2分找就行了。
代码
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
int n,p[1000005],h,f[1000005];
bool vis[1000005];
void setup()
{
h=0;
memset(f,0,sizeof(f));
memset(vis,0,sizeof(vis));
memset(p,0,sizeof(p));
p[h++]=2; f[2]=2;
for (int i=4;i<=1000000;i+=2)
{
vis[i]=1;
f[i]=2;
}
for (int i=3;i<=1000000;i+=2) if (!vis[i])
{
p[h++]=i;
for (int j=i;j<=1000000;j+=i)
{
vis[j]=1;
f[j]=i;
}
}
}
int bserch(int k)
{
int l=0,r=h-1,mid;
while (l!=r)
{
mid=(l+r)>>1;
if (k<=p[mid]) r=mid;
else l=mid+1;
}
return l;
}
int main()
{
setup();
while (scanf("%d",&n)!=EOF)
{
if (n==1)
{
printf("0\n");
continue;
}
int c=bserch(f[n])+1;
printf("%d\n",c);
}
return 0;
}