PTA乙級----1007素數對猜想

1.題目

在這裏插入圖片描述

2.分析

這題的思路很簡單,但是因爲正整數最高可能爲10^5因此很可能會出現段錯誤,下面用兩種方法解決問題
1)直接先求出所有的素數存儲在一個數組中,然後在逐個求差值看是否滿足條件
2)每次求出素數後都和前一個素數進行比較看是否滿足條件,同時統計滿足條件的個數

3. 代碼

#include <iostream>
using namespace std;

//方法一: 將所有素數存儲在數組中,之後統計滿足條件的個數
bool isSS(int num) {
	for (int i = 2; i <= sqrt(num); i++) {	//這裏直接小於num的開放就可以,如果不是這種形式會導致超時
		if (num % i == 0) {
			return false;
		}
	}
	return true;
}

int main()
{
	int n, a[10000], num = 0;
	cin >> n;

	int j = 0;
	for (int i = 2; i <= n; i++) {
		if (isSS(i)) {
			a[j] = i;
			j++;
		}
	}

	//統計滿足條件的個數
	for (int i = 1; i < j; i++) {
		if (a[i] - a[i - 1] == 2) {
			num++;
		}
	}

	cout << num;

	return 0;
}

#include <iostream>
using namespace std;

bool isSS(int num) {
	for (int i = 2; i <=sqrt(num); i++) {
		if (num % i == 0) {
			return false;
		}
	}
	return true;
}

int main()
{
	//方法二: 每次得到一個素數就和前一個素數進行比較
	//preS:記錄前一個素數
	int preS = 2, n, num = 0;
	cin >> n;

	for (int i = 3; i <= n; i++) {
		if (isSS(i)) {
			if (i - preS == 2) {
				num++;
			}
			preS = i;
		}
	}

	cout << num;

	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章