首页 > 编程语言 > 详细

P1579 哥德巴赫猜想(升级版) <洛谷> (C++)(筛法选素数)

时间:2018-09-21 23:48:40      阅读:243      评论:0      收藏:0      [点我收藏+]

两层循环找到其中两个值,最后一个值由输入的num减去他们的和可得到,若都是质数则可以输出

筛法选素数可稍微优化判断素数的时间

代码如下

#include<stdio.h>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<cmath>
#include<iostream>
#include<string>

using namespace std ;

const int MAXN = 20005 ;

bool flag[MAXN] ;

void erat( int num ){
    memset( flag , true , sizeof(flag) ) ;
    flag[0] = flag[1] = 0 ;
    for ( int i = 2 ; i <= num ; i ++ ){
        if ( flag[i] ){
            for ( int j = i * i ; j <= num ; j += i ){
                flag[j] = 0 ;
            }
        }
    }
    return ;
}

int main(){
    int n ;
    cin >> n ;
    erat(n) ;
    for ( int i = 2 ; i < n ; i ++ ){
        for ( int j = 2 ; j < n ; j ++ ){
            int num = n - i - j ;
            if ( flag[num] && flag[i] && flag[j] ){
                cout << i << " " << j << " " << num ;
                return 0;
            }
        }
    }
    return 0 ;
}

 

P1579 哥德巴赫猜想(升级版) <洛谷> (C++)(筛法选素数)

原文:https://www.cnblogs.com/Cantredo/p/9688738.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!