题目传送门:
http://acm.hdu.edu.cn/showproblem.php?pid=2136
题目的大意是求出一个数的最大质因数在素数表中的位置。
素数筛法是一种判别素数的方法,对于范围不是特别大,需要反复查询的情况,效率较高。
memset(isprime, -1, sizeof(isprime));
isprime[1] = 0;
for(int i = 2; i <= MAX; ++ i)
if( isprime[i])
for(int j = i * 2; j <= MAX; j += i)
isprime[j] = 0;
通过循环,制作从1到MAX的素数表。
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#define MAX 1000001
using namespace std;
int main(int argc, char const *argv[])
{
int n;
int f[MAX] ;
memset(f,-1,sizeof(f));
f[1] = 0;
int pos = 0;
int i,j;
for (i = 2; i < MAX; i ++) {
if (f[i] == -1) {
pos ++;
f[i] = pos;
for (j = 2 * i; j < MAX; j += i) {
f[j] = pos;
}
}
}
while (~scanf("%d",&n)) {
cout << f[n] << endl;
}
return 0;
}