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 }

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

  • 相关阅读:
    SpringBoot实现原理
    常见Http状态码大全
    forward(转发)和redirect(重定向)有什么区别
    1094. Car Pooling (M)
    0980. Unique Paths III (H)
    1291. Sequential Digits (M)
    0121. Best Time to Buy and Sell Stock (E)
    1041. Robot Bounded In Circle (M)
    0421. Maximum XOR of Two Numbers in an Array (M)
    0216. Combination Sum III (M)
  • 原文地址:https://www.cnblogs.com/buanxu/p/12812606.html
Copyright © 2011-2022 走看看