A1034. 孪生素数对

来源:互联网 发布:2017年旅游大数据分析 编辑:程序博客网 时间:2024/05/18 01:14
问题描述
  差为2的两个素数被称为孪生素数对,例如3和5, 11和13.
  给定一个区间,请输出区间内所有的孪生素数对.
输入格式
  两个正整数a,b,其中a<b,以空格分开
输出格式
  区间[a,b]内的所有孪生素数对,按从小到大顺序。每行一个素数对,其中小的在前,大的在后,以空格分开。
  如果区间内没有素数对的话,输出-1.
样例输入
2 15
样例输出
3 5
5 7
11 13
样例输入
14 18
样例输出
-1

思路:
    用筛选法只得80分,也通过不了。。无语了,看了别人写的一个都没用到数组,好强大!
自己代码:
#include <stdio.h>#include <math.h>main(){int i,j,a,b,x[10001]={0},flag=1,k=0;scanf("%d%d",&a,&b);for (i=2;i<=10000;i++)  x[i]=i;for (i=2;i<=sqrt(10000);i++){if (x[i]!=0)for (j=2*i;j<=10000;j=j+i)  x[j]=0;}for (i=0;i<=10000;i++)if (x[i]!=0)x[k++]=x[i];for (i=a;i<=b;i++){for (j=0;j<k;j++){if (i==x[j]&&x[j]+2==x[j+1]){flag=0;printf("%d %d\n",x[j],x[j+1]);    }}}if (flag)printf("-1");}

    

好代码:
 从a到b将每个数调用函数判断是否是素数在将这个数+2的到的数,判断其是否是素数。
#include"stdio.h"int zs(int n){    int i;    if(n<2)        return 0;    for(i=2;i*i<=n;i++)        if(n%i==0)            return 0;    return 1;}int main(){    int a,b,flag=1;    scanf("%d %d",&a,&b);    for(;a+2<=b;a++)        if(zs(a)&&zs(a+2))            flag=0,printf("%d %d\n",a,a+2);    if(flag)        printf("-1\n");    return 0;}


0 0
原创粉丝点击