当前位置:   article > 正文

自测-2 素数对猜想(20 分)

自测-2 素数对猜想

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

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

输入格式:

输入在一行给出正整数N

输出格式:

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

输入样例:

20

输出样例:

4

思路:可以先定义一个数组作用是记录从1到n的所有素数,然后再看a[i+1]-a[i]的值是不是满条件即可。但需要注意的是n最大为100000,所以要选取适合的判断一个数是不是素数的方法:

1、首先我们知道1不是素数可以不用考虑,2是素数也先不管,所以这样来判断一个数n是不是素数:

  1. for(i=2;i<n;i++)
  2. {
  3. if(n%i==0)
  4. {
  5. printf("这不是一个素数");
  6. break;
  7. }
  8. }

2、通过一个数的sqrt(n)来判断,即:

  1. for(j=2; j<=sqrt(n); j++)
  2. {
  3. if(i%j==0)
  4. {
  5. printf("这不是一个素数");
  6. break;
  7. }
  8. }

很显然第二种判别方法是最快的,而选用第一种方法的时候就会tle了。

AC代码如下:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main()
  4. {
  5. int n,i,j,flag,k,sum=0,w=0;
  6. int a[112345];
  7. a[0]=2;
  8. scanf("%d",&n);
  9. for(i=3; i<=n; i++)
  10. {
  11. flag=1;
  12. k=sqrt(i);
  13. for(j=2; j<=k; j++)
  14. {
  15. if(i%j==0)
  16. {
  17. flag=0;
  18. break;
  19. }
  20. }
  21. if(flag)
  22. {
  23. a[++w]=i;
  24. }
  25. }
  26. for(i=0; i<=w; i++)
  27. {
  28. if(a[i+1]-a[i]==2)
  29. {
  30. sum++;
  31. }
  32. }
  33. printf("%d",sum);
  34. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/342863
推荐阅读
相关标签
  

闽ICP备14008679号