素数筛选 - bailian 4138:质数的和与积

Posted zhangyue123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了素数筛选 - bailian 4138:质数的和与积相关的知识,希望对你有一定的参考价值。

题目链接

http://bailian.openjudge.cn/practice/4138/

素数的Esieve筛选法

技术图片
截图自百度百科
那这道题就可以从 s/2 的位置向前向后查找素数表,找到第一对素数就是最大的素数积。

cpp代码

#include <cstdio>
#include <cstring>
#include <cmath>
#define MAX 10010

int prime[MAX];

void pick(int n){
    memset(prime, -1, sizeof(prime));
    prime[1] = 0;
    
    for(int i = 2; i*i <= n; i++)
        if(prime[i])
            for(int j = i + i; j <= n; j+= i)
                prime[j] = 0;
}

int main(){
    int s;
    pick(MAX);
    
    scanf("%d", &s);
    if(s % 2){
        if(prime[s-2])
            printf("%d
", 2 * (s - 2));
    }
    else{
        int i, j;
        for(i = j = s/2; !prime[i] || !prime[j]; i--, j++);
        printf("%d
", i * j);
    }
    return 0;
}

以上是关于素数筛选 - bailian 4138:质数的和与积的主要内容,如果未能解决你的问题,请参考以下文章

质数——筛选法

素数筛选法

C语言求范围之内素数的和与个数?

关于埃拉托色尼筛选法的整理(质数问题)

用筛选法求100之内的素数

质数筛选法:Eratosthenes筛选法与欧拉筛选法