zoukankan      html  css  js  c++  java
  • NYOJ 26

    孪生素数问题
    时间限制:3000 ms | 内存限制:65535 KB
    难度:2
    描述
    写一个程序,找出给出素数范围内的所有孪生素数的组数。一般来说,孪生素数就是指两个素数距离
    为2,近的不能再近的相邻素数。有些童鞋一看到题就开始写程序,不仔细看题,咱们为了遏制一下读
    题不认真仔细的童鞋,规定,两个素数相邻为1的也成为孪生素数。
    输入
    第一行给出N(0<N<100)表示测试数据组数。
    接下来组测试数据给出m,表示找出m之前的所有孪生素数。
    (0<m<1000000)
    输出
    每组测试数据输出占一行,该行为m范围内所有孪生素数组数。
    样例输入
    1
    14
    样例输出
    4

    //筛法求孪生素数
    #include<stdio.h>
    #include<math.h>//sqrt
    #include<string.h>
    bool visit[1000000];//prime[10000];//根据素数定理,实际没必要prime开成一百万
    int main()
    {
    int i,j;
    long int m,n;
    int count=0;
    //c=0;
    int s;//标志变量,1为素数;或者用结构体数组
    int temp;
    scanf("%d",&n);
    while(n--)
    {
    scanf("%d",&m);
    temp=(int)sqrt(m+0.5);//下面用到i*i
    memset(visit,0,sizeof(visit));
    //visit[1]=1;
    for(i=2;i<=temp;i++)//
    if(!visit[i])
    {
    //prime[c++]=i;
    for(j=i*i;j<=m;j+=i)
    //别误写为j++,不必从2*i开始,因为i=2时已经排除
    visit[j]=1;
    }
    if(m==3)//距离为1的就这一种情况 
    count=1;
    else 
    if(m>3)
    { for(i=1;i<=m-2;i++)//不是<=m,这要有等号,TMD竟然包括m 
    ////i从1开始,不是0;因为前面已经有m==3的情况 
    
    {
    if(!visit[i]&&!visit[i+2])
    count++; 
    }
    count+1;
    }
    else
    count=0;
    printf("%d\n",count);//1既不是质数也不是合数,所以不能是count+1;况且已经忽略
    
    //visit[0] 
    count=0;
    //c=0;
    }
    return 0;
    
    }
    
    
  • 相关阅读:
    IIS相关知识
    C#小知识
    DOS与批处理
    Visual Studio与Chrome调试工具使用技巧
    CLR via C# 随记
    jQuery Plugin Docs
    FlexPaper使用小结
    软件测试分为几个阶段 各阶段的测试策略和要求是什么?
    软件产品质量特性是什么?
    简述什么是静态测试、动态测试、黑盒测试、白盒测试、α测试 β测试
  • 原文地址:https://www.cnblogs.com/hxsyl/p/2447018.html
Copyright © 2011-2022 走看看