Hdoj 1262 尋找素數對
阿新 • • 發佈:2019-01-23
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;
}
更多問題請關注個人部落格,不定時更新