HDOJ,數論簡單入門題目,杭電1262,尋找素數對
阿新 • • 發佈:2019-01-06
這個查結果的思想比較精妙吧。。。。
/***** HDOJ 1262 尋找素數對 ********/ /******** written by C_Shit_Hu ************/ /****************************************************************************/ /* 一個數論的入門題目 哥德巴赫猜想大家都知道一點吧.我們現在不是想證明這個結論, 而是想在程式語言內部能夠表示的數集中, 任意取出一個偶數,來尋找兩個素數,使得其和等於該偶數. 做好了這件實事,就能說明這個猜想是成立的. 由於可以有不同的素數對來表示同一個偶數,所以專門要求所尋找的素數對是兩個值最相近的. Input 輸入中是一些偶整數M(5<M<=10000) Output 對於每個偶數,輸出兩個彼此最接近的素數,其和等於該偶數. */ /****************************************************************************/ // 簡單的數論題目,不過其中的中間值向外擴充套件的思想值得借鑑 #include <stdio.h> #include <string.h> #include <math.h> // 素數判定呼叫函式 int Judge(int a) { int j; for(j=2; j<=sqrt(a); j++) { if(a % j == 0) return 0; // 如果除一和本身外有約數,則不是素數 } return 1; } int main() { int m, half, i; while(scanf("%d",&m) != EOF) { half = m / 2; for(i=half; i>0; i--) { // 理解此處的half的精妙之處:由於是求兩個數,而且這兩個數最接近而且他們的和為m, // 於是就將m從均分,然後兩個數字同時向首尾擴散,判斷是否同時為素數,若是,則輸出 int temp = half * 2 - i; if(Judge(i) && Judge(temp)) { printf("%d %d\n", i, temp); break; } } } return 0; } /******************************************************/ /******************** 心得體會 **********************/ /* 這個,考察的不難,但是要是精妙的演算法,程式碼讓人賞心悅目!!! 水水更健康!!! */ /******************************************************/