1. 程式人生 > >Hdoj 1262 尋找素數對

Hdoj 1262 尋找素數對

Problem Description
哥德巴赫猜想大家都知道一點吧.我們現在不是想證明這個結論,而是想在程式語言內部能夠表示的數集中,任意取出一個偶數,來尋找兩個素數,使得其和等於該偶數.
做好了這件實事,就能說明這個猜想是成立的.
由於可以有不同的素數對來表示同一個偶數,所以專門要求所尋找的素數對是兩個值最相近的.

Input
輸入一些數是偶整數,範圍在5-10000
Output
對於每個偶數,輸出兩個彼此最接近的素數,其和等於該偶數.

Sample Input

20 30 40

Sample Output

7 13
13 17
17 23

Source
浙江工業大學第四屆大學生程式設計競賽

題目分析

要使得素數對的差值最小,就以為n/2開始分界,一個往增加的方向,一個往減小的方向

Code

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cctype> 
#include<cstring>
#include<cstdlib>
using namespace std;
bool isprime(int x)
{
    if(x==2) return true;
    if
(x<2) return false; for(int i=2;i<=x/2;i++) { if(x%i==0) return false; } return true; } int main() { int n; while(cin>>n) { int dv=n/2; int up=dv; int down=dv; for(;;) { if(isprime(up)&&isprime(down)) break
; else { up++; down--; } } cout<<down<<" "<<up<<endl; } return 0; }

更多問題請關注個人部落格,不定時更新