寻找素数对

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1262

Problem Description
哥德巴赫猜想大家都知道一点吧.我们现在不是想证明这个结论,而是想在程序语言内部能够表示的数集中,任意取出一个偶数,来寻找两个素数,使得其和等于该偶数.
做好了这件实事,就能说明这个猜想是成立的.
由于可以有不同的素数对来表示同一个偶数,所以专门要求所寻找的素数对是两个值最相近的.
 

 

Input
输入中是一些偶整数M(5<M<=10000).
 

 

Output
对于每个偶数,输出两个彼此最接近的素数,其和等于该偶数.
 

 

Sample Input
20 30 40
 

 

Sample Output
7 13
13 17
17 23
 
code:
      
View Code
#include <iostream>
#include <cmath>
using namespace std;

int prime[1300];                 //开一个数组进行素数打表
int a[1000];

int main ()
{
    int cnt = 1;
prime[0]=2;

    for (int i = 3; i < 10000; i=i+2)
    {
        int flag = 1;
        for (int j = 2; j <= sqrt(double(i)); j ++)
        {
            if (i % j == 0)
            {
                flag = 0;
                break;
            }
        }
        if(flag)
            prime[cnt++] = i;
    }                                  //本段落是进行预处理.(打表)
    
    int x;
    int k = 0;
    while(cin >> x)                         //输入x
    {
        a[k++] = x;                   //用数组将输入的数值存储起来
    }

    for(int i = 0; i < k; i ++)            
    {
        int min = 20000;
        int px, py;
        int po = a[i] / 2;
        for(int j = 0; prime[j] <= po; j ++)    //外层的是第一个数,打印出来的一定会比内层的小,所以一定是要小于等于输入的数据的,循环到数据的一半即可
        {
            for(int l = j; prime[l] < a[i]; l ++)            //内层寻找另一个数prime[py];
            {
                if(prime[l] + prime[j] == a[i])               //判断是否满足条件,
                {
                    if(prime[l] - prime[j] < min)                   //满足外层条件后,继续筛选,筛选出最大的两个满足条件的数
                    {
                        min = prime[l] + prime[j];                          
                        px = j;
                        py = l;
                    }
                }
                if(prime[l] + prime[j] > a[i])        //这一个判断是必要的,可以节省很多的时间,如果两个数的和大于目标数,则内层循环就不必继续。break.
                    break;
            }
        }
        cout << prime[px] << " " << prime[py] << endl;   //输出.
    }
    
    return 0;
}
 

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
posted @ 2012-08-31 09:37  岳凌哥来虐场不高兴  阅读(952)  评论(8)    收藏  举报