【PAT】1007. 素数对猜想 (20)

1007. 素数对猜想 (20)

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

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

输入格式:每个测试输入包含1个测试用例,给出正整数N。

输出格式:每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。

输入样例:
20
输出样例:
4

关于素数判断函数:

  第1种:按照定义进行判断,这种函数在N(<105)很大时,计算量非常大,在提交程序后显示“运算超时”:

1 bool prime(int num){
2     int i;
3     if(num==1) return false;
4     for(i=2;i<num;i++)
5         if(num%i==0) return false;
6     return true;
7 }

  第2种:在N的平方根范围内进行判断,大大减小运算量,故使用此函数:

1 bool prime(int num){
2     int i,k;
3     if(num==1) return false;
4     k=int(sqrt(num));    
5     for(i=2;i<=k;i++)
6         if(num%i==0) return false;
7     return true;
8 }

程序设计:

方法一:

  1.求出不超过N范围内的所有素数,并将其存储在数组prime_num[]中,由于105范围内一共有9592个素数,所以数组元素个数不应小于9592

  2.对prime_num[]数组中的元素进行比较,求出后一位比前一位数值大2的个数

C++ 代码如下:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 bool prime(int num){
 4     int i,k;
 5     if(num==1) return false;
 6     k=int(sqrt(num));    
 7     for(i=2;i<=k;i++)
 8         if(num%i==0) return false;
 9     return true;
10 }
11 int main() {
12     int prime_num[9600];
13     int i,j=0,count=0;
14     long n;
15     cin>>n;
16     for(i=2;i<=n;i++){
17         if(prime(i)){
18             prime_num[j]=i;
19             j++;
20         }
21         else continue;
22     }
23     for(i=0;i<j-1;i++)
24         if(prime_num[i+1]-prime_num[i]==2) ++count;
25     cout<<count;
26     system("pause");
27     return 0;
28 }
C++ Code 1

方法二:

  当N>2时,所有的素数均为奇数,故只需求出相邻奇数中全为素数的个数即可

C++ 代码如下:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 bool prime(int num){
 4     int i,k;
 5     if(num==1) return false;
 6     k=int(sqrt(num));    
 7     for(i=2;i<=k;i++)
 8         if(num%i==0) return false;
 9     return true;
10 }
11 int main() {
12     int i,count=0;
13     long n;
14     cin>>n;
15     for(i=3;i+2<=n;i+=2){
16         if(prime(i))
17             if(prime(i+2)) count++;        
18         else continue;        
19     }
20     cout<<count;
21     system("pause");
22     return 0;
23 }
C++ Code 2

猜你喜欢

转载自www.cnblogs.com/pgzhang/p/8928499.html
今日推荐