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