美文网首页
hdoj2136素数筛选

hdoj2136素数筛选

作者: 科学旅行者 | 来源:发表于2016-07-13 16:11 被阅读109次

题目:

Problem Description
Everybody knows any number can be combined by the prime number.
Now, your task is telling me what position of the largest prime factor.
The position of prime 2 is 1, prime 3 is 2, and prime 5 is 3, etc.
Specially, LPF(1) = 0.
Input
Each line will contain one integer n(0 < n < 1000000).
Output
Output the LPF(n).
Sample Input
1
2
3
4
5
Sample Output
0
1
2
1
3

大致题意:

每个大于等于2的数都由几个素数组成,问满足情况的最大素数是素数表的第几个位置。

由于n最大可取1000000-1,如按常规思路,多半会超时,因此此题可以用素数筛选法。

可以定义一个全局数组,保存0~n的数字为下标,0和1很特殊,直接赋值为0.其余的数暂时清为0.
之后进行筛选,为0的方可值加1,进入内层循环(下标从2开始),然后将它的倍数的值赋为它的值。以此类推。

参考代码:

#include <cstdio> 
using namespace std;
int primes[1000005] = {0};
void mark(int primes[]) {
    int k = 1;
    primes[0] = primes[1] = 0;
    for (int i = 2;i <= 1000000;++i) {
        if (primes[i] == 0) {
            primes[i] = k++;
            for (int j = i * 2;j <= 1000000;j+=i) {
                primes[j] = primes[i];
            }
        }
    }
}
int main() {
    mark(primes);
    int n;
    while (scanf("%d", &n) != EOF) {
        printf("%d\n", primes[n]);
    }
    return 0;
}


有一个坑人的地方:用cin,cout会超时,而用scanf,printf就可以。

相关文章

  • hdoj2136素数筛选

    题目: Problem DescriptionEverybody knows any number can be ...

  • Algorithm

    素数筛选

  • 素数筛选

    今天在面试时被问到了一个问题:求不大于n的最大素数,当时只想出暴力解法,回来查资料找到了正确的求解方法。 素数筛法...

  • 筛选素数/筛选质数

  • 区间素数线性筛选

    区间素数线性筛选 假设应用场景为求一个区间长度远小于右端点的所有素数,该区间为 。如若使用朴素素数线性筛选,则需...

  • 素数线性筛选

    素数线性筛选 素数的定义是除了1和自身能被整除外,没有其他数能被它整除。除此之外,1既不是素数,也不是合数。因此,...

  • 素数算法

    寻找素数的算法有很多,最著名应是筛选法,以下是笔者用JavaScript编写的一个找素数的函数,借鉴了各种找素数的...

  • 筛选法求素数

  • RSA加密解密算法—数论基础

    本章涉及知识点1、素数的定义2、寻找素数算法—短除法3、寻找素数算法—筛选法4、互质关系5、欧拉函数的证明6、欧拉...

  • 筛选N以内的素数

    1.题目描述用简单素数筛选法求N以内的素数。 2.格式与样例:输入格式N输出格式2~N的素数输入样例100输出样例...

网友评论

      本文标题:hdoj2136素数筛选

      本文链接:https://www.haomeiwen.com/subject/prasjttx.html