63 歌德巴赫猜想
阿新 • • 發佈:2022-03-05
問題描述 :
歌德巴赫猜想指出:任何一個大於2的偶數,都可以表示成兩個素數的和。例如:8 = 3+5, 44 = 13+31等。試程式設計在6至100範圍內驗證歌德巴赫猜想。
輸入說明 :
先輸入一個正整數n,表示有n組測試資料。所有資料前後沒有多餘的空行,兩組資料之間也沒有多餘的空行。每組輸入資料由一行組成,在接下來的n行中,每行有1個偶數a(6≤a≤100),在行首和行尾沒有多餘的空格。
輸出說明 :
對於每組輸入,輸出滿足歌德巴赫猜想兩個素數,小的素數的在前,在行首和行尾沒有多餘的空格。如果有多組結果,輸出的第一個素數要求最小。所有資料前後沒有多餘的空行,兩組資料之間也沒有多餘的空行。
輸入範例 :
2
8
44
輸出範例 :
3 5
3 41
思想:和上題大致思路類似,當找到第一個滿足的組合的時候,break內層迴圈出去,外層迴圈就加一個flag來判定是否break即可。
#include <stdio.h> #include <stdlib.h> int isVegetableNum(int x){ for(int i = 2;i<x;i++){ if(x%i==0){ return 0; } } return 1; } int main() {int num, i, j, k,s=0; int length =0; int vegetableNum[100]={0}; for(i=2;i<100;i++){ if(isVegetableNum(i)){ vegetableNum[length++] = i; } } scanf("%d",&num); int nums[num]; for(i=0;i<num;i++){ scanf("%d",&nums[i]); } for(i = 0;i<num;i++){ int flag=0; for(j=0;vegetableNum[j]<nums[i]/2;j++){ for(k=0;vegetableNum[k]<nums[i];k++){ if(vegetableNum[j]+vegetableNum[k]==nums[i]){ printf("%d %d\n",vegetableNum[j],vegetableNum[k]); flag =1; break; } } if(flag){ break; } } } return 0; }