zoukankan      html  css  js  c++  java
  • 1007 素数对猜想

    1007 素数对猜想 (20分)
     

    让我们定义dn​​为:dn​​=pn+1​​pn​​,其中pi​​是第i个素数。显然有d1​​=1,且对于n>1有dn​​是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。

    现给定任意正整数N(<105​​),请计算不超过N的满足猜想的素数对的个数。

    输入格式:

    输入在一行给出正整数N

    输出格式:

    在一行中输出不超过N的满足猜想的素数对的个数。

    输入样例:

    20

    输出样例:

    4
    

        这道题还是颇费了点儿功夫的,始用暴力查找,但是很明显这是行不通的的,因为会超时。但是我又不会其他方法了,于是去网上看了看。找到了一个埃拉托斯特尼筛子法,

    它的基本思路是,删掉所有的合数,剩下的一定就是素数。于是这道题我们就用这个方法来寻找所有的素数,而且效率也很高。 看代码,代码注释的比较详细

     1 #include<iostream>
     2 #include<vector>
     3 using namespace std;
     4 int main() 
     5 {//寻找素数用埃拉托斯特尼筛子法,基本思路:不是挑选出所有素数,而是筛掉所有的合数
     6     int n;
     7     cin>>n;
     8     vector<int> v(n,0);
     9     int k=0;
    10     for(int i=2;i<=n/2;i++) //只需要一半就行,剔除v中的合数,剩下的即为素数
    11     {
    12         k=i;
    13         if(v[k] == 0) 
    14         {
    15             while (k<n) 
    16             {
    17                 k += i;
    18                 if(k<n) 
    19                     v[k]=1;  //标记为1代表不是素数
    20             }
    21         }
    22     }
    23     vector<int> v1;
    24     for(int i=2;i<n;i++) 
    25     {
    26         if (v[i] == 0)
    27             v1.push_back(i);
    28     }
    29     int count=0;
    30     for(unsigned int i=1;i<v1.size();i++)
    31     {
    32         if(v1[i]-v1[i-1]==2)
    33             count++;
    34     }
    35     cout<<count;
    36     return 0;
    37 }

    有一个测试点没通过,找不出哪里有问题

  • 相关阅读:
    Base64编码原理分析
    对 js 高程 Preflighted Reqeusts 的理解
    js 跨域 之 修改服务器配置-XAMPP-Apache (nginx 拉到最后!)
    js 模拟 select 的 click 事件
    串讲-解释篇:作用域,作用域链,执行环境,变量对象,活动对象,闭包
    js 匿名函数-立即调用的函数表达式
    Java I/O流输入输出,序列化,NIO,NIO.2
    Java8Lambda表达式
    设计模式之适配器模式
    设计模式之装饰器设计模式
  • 原文地址:https://www.cnblogs.com/buanxu/p/12812606.html
Copyright © 2011-2022 走看看