首页 > 代码库 > 杭电 1262 寻找素数对 【素数】

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

题目链接: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 寻找素数对 【素数】