P1579 哥德巴赫猜想(升級版) <洛谷> (C++)(篩法選素數)
阿新 • • 發佈:2018-09-22
時間 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++)(篩法選素數)