1. 程式人生 > >P1579 哥德巴赫猜想(升級版) <洛谷> (C++)(篩法選素數)

P1579 哥德巴赫猜想(升級版) <洛谷> (C++)(篩法選素數)

時間 turn std str ems main math mem num

兩層循環找到其中兩個值,最後一個值由輸入的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++)(篩法選素數)