1. 程式人生 > 其它 >63 歌德巴赫猜想

63 歌德巴赫猜想

問題描述 :

歌德巴赫猜想指出:任何一個大於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; }