码迷,mamicode.com
首页 > 其他好文 > 详细

杭电 1262 寻找素数对 【素数】

时间:2014-11-23 07:03:53      阅读:260      评论:0      收藏:0      [点我收藏+]

标签:blog   http   io   ar   for   div   log   ef   amp   

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

解题思路:先将题目中给出的偶数范围内的素数打表,设输入的那个偶数为n,这样找到n/2在素数表的位置k,从pn[k]到pn[2];以及从pn[k]到pn[10000]依次判断相加是否等于n即可。

反思:注意像 10和26这样的偶数,应该输出的是 5 5;13 13;所以应该单独处理这种n/2等于一个素数的偶数

ps:这是在杭电的100题,这三个多月来,加油!!!!!fighting!!!!!!

#include <stdio.h>
#include <math.h>
#define N 10000
 int p[N];   //判断p[i]中的i是否为素数
int pn[N];   //存储素数

void prim_num()
{
    int i,j,n;
    for(i=1; i<=N; i++)
        p[i]=1;
    n=(int)sqrt(N);
    for(i=2; i<=n; i++)
    {
        for(j=i+i; j<=N; j+=i)   //素数的合肯定不是素数,这就是判断哪些数不是素数
        {
            p[j]=0;
        }
    }
    j=1;
    for(i=1; i<=N; i++)  //把素数存储入pn[N],下表从1开始
    {
        if(p[i])
        {
            pn[j++]=i;
        }
    }
}

int main()
{
    int i,j,k;
    int n;
    prim_num();
    while(scanf("%d",&n)!=EOF)
    {
        int flag=1;
        for(i=2;i<N;i++)
        {
            if(n/2==pn[i])
            {
                k=i;
                break;
            }
            if(n/2>pn[i]&&n/2<pn[i+1])
            {
                k=i;
                break;
            }

        }
        for(i=k;i>=0&&flag;i--)
        {
            for(j=i;j<N;j++)
            {
                if(pn[i]+pn[j]==n)
                {
                    printf("%d %d\n",pn[i],pn[j]);
                    flag=0;

                }
            }
        }
    }
    return 0;
}

  

杭电 1262 寻找素数对 【素数】

标签:blog   http   io   ar   for   div   log   ef   amp   

原文地址:http://www.cnblogs.com/wuyuewoniu/p/4116118.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!