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;
}