素数筛 HDOJ 2136 Largest prime factor

来源:互联网 发布:php在线pdf阅读代码 编辑:程序博客网 时间:2024/04/28 04:59

题目传送门:
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 1000001using 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;}
0 0
原创粉丝点击