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

两层循环找到其中两个值,最后一个值由输入的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 ;
}

猜你喜欢

转载自www.cnblogs.com/Cantredo/p/9688738.html
今日推荐