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;
    
    }
    
    
  • 相关阅读:
    字符串数组和字符串的转换
    项目总结3
    解决几种中文乱码的问题
    ipms的sql语句
    ipms综合管理系统的总结2
    ipms综合管理系统的总结
    简答题汇总
    log4net根据日志类型写入到不同的文件中
    NUnit单元测试初试
    log4net
  • 原文地址:https://www.cnblogs.com/hxsyl/p/2447018.html
Copyright © 2011-2022 走看看