题意:求某个数的最大质因子是第几个质数
思路:用筛法打个带标记的质数表即可
代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<iomanip>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
using namespace std;
const int MAXN = 1000000;
int str[MAXN + 10], prime[MAXN];
int Max(int a, int b)
{
return a>b ? a : b;
}
void init()
{
memset(str, 0, sizeof str);
int cnt = 1;
str[0] = 0;
str[1] = 0;
for (int i = 2; i <= MAXN; i++)
{
if (str[i] == 0)
{
str[i] = cnt;
prime[cnt++] = i;
}
for (int j = 1; j < cnt && i * prime[j] <= MAXN; j++)
{
str[i * prime[j]] = Max(j, str[i]);
if (i % prime[j] == 0)
{
break;
}
}
}
}
int main()
{
init();
int n;
while (~scanf("%d", &n))
{
printf("%d\n", str[n]);
}
return 0;
}