题目:素数对猜想
让我们定义 dn 为:dn = p{n+1} - pn,其中 pi 是第i个素数。显然有 d1=1 且对于n>1有 dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N (< 105),请计算不超过N的满足猜想的素数对的个数。
输入格式:每个测试输入包含1个测试用例,给出正整数N。
输出格式:每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4

一、思考过程:
1.判断1到给定的数N中有多少个素数。
(1)得知道素数的判定方法。

素数,即质数。只能被它本身和1整除的数为素数
例如数字1,11只能被它本身和1整除,所以11是素数。
例如数字9,9除了能被它本身和1整除之外,还能被3整除,所以数字9不是素数。
在所有的素数中,最小的素数为2。

(2)求出给定数N范围内有多少个素数

例如:给定N = 20;
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
素数有2, 3, 5, 7, 11, 13, 17, 19

2.将素数存放到数组中。

array[MAX] = { 2, 3, 5, 7, 11, 13, 17, 19};

3.判断数组中相邻且差为2的素数对,记录有多少个。

从数组中可以得出:
5 - 3 = 2
7 - 5 = 2
13 - 11 = 2
19 - 17 = 2
所以可以得出素数对:
[3 , 5], [5 , 7], [11 , 13], [17 , 19]
4个素数对

二、解题方法
使用枚举法
项目包含一个头文件function.h和main.cpp
function.h包含两个函数:判断素数的函数isPrime(),执行操作的函数func()
main.cpp调用function.h中执行操作的函数func()

枚举过程:
通过数组一个一个的计算相邻素数对的差值为2的个数。
在func()函数中先调用isPrime(),判断给的数是否为素数,是素数就将它放入一个数组中,再进行array[i + 1] - array[i] == 2判断,最后记录个数即可。

//function.h

#include <iostream>
using namespace std;
#define MAX 200

//判断是否为素数
bool isPrime(int n) {
	bool prime = true;
	for (int i = 2; i < n; i++) {			//让n除以2到n - 1的数
		if (n % i == 0) {					//如果n 被其中一个数整除
			prime = false;					//那么n不是素数
			break;
		}
	}
	return prime;
}

//执行操作的函数
void function(int n) {
	int i, j;
	int arr[MAX];							//存放素数的数组
	for (i = 2, j = 0; i < n; i++) {		//遍历2到n之间的数有几个是素数	
		if (isPrime(i)) {					//判断是否为素数
			arr[j] = i;					//如果是素数,将该数放入数组
			j++;							//控制数组下标增加
		}
	}
	int count = 0;							//记录素数对的个数
	for (i = 0; i < j; i++) {
		if (arr[i + 1] - arr[i] == 2) {	//相邻且差为2的素数对
			count++;
		}
	}
	cout << count;
}
//main.cpp

#include <iostream>
#include "function.h"
using namespace std;

int main(){
	int n = 0;
	cin >> n;
	function(n);			//调用function.h里的function函数
	
	cout << endl;
	system("pause");
	return 0;
}

【C/C++】素数对猜想问题解法

相关文章:

  • 2021-12-13
  • 2021-12-20
  • 2022-01-19
  • 2022-12-23
  • 2021-08-24
  • 2022-02-13
  • 2022-01-19
猜你喜欢
  • 2021-12-11
  • 2021-12-13
  • 2022-12-23
  • 2022-02-01
  • 2021-12-09
  • 2022-01-04
  • 2021-12-23
相关资源
相似解决方案