タイトルの説明:
d nを次のように定義しましょう:d n = p n + 1-p n、ここでpiはi番目の素数です。明らかに、dは
1
= 1を、そしてd
nが
偶数のn> 1のために。「プライムペアの推測」は、「2の差がある隣接するプライム番号のペアが無限にある」と考えています。
ここで、正の整数N(<10
5
)が与えられた場合、推測を満たすNを超えない素数ペアの数を数えてください。
入力形式:
正の整数Nを1行で入力します。
出力形式:
Nを超えず、推測を満たす素数ペアの数を1行で出力します。
入力サンプル:
20
出力サンプル:
4
問題解決のアイデア:この
問題は、実行タイムアウトのために
元のアイデアにとどまっています。最初にそれが素数であるかどうかを判断する関数を記述し、次にこれらの素数をベクトルにインストールしてから、2つの隣接する数の間に差があるかどうかを計算します2;結果がタイムアウトしました。
大きなアイデア:
素数を決定するための関数isprimeは、次のように記述されます。2から部首aまでの数a、iの場合、aがiのいずれかで割り切れる場合、iは素数ではないことを意味し、falseを返します。それ以外の場合、aは素数を返します。データNを入力すると、forループのiは、i-2とiが5からNまで順番に素数であるかどうかを判断します。それらがすべて素数である場合は、cnt ++の数を数え、最後にcntを出力します。
これは隣接する2つの差です。素数であるかどうかを数字で判断するのは簡単です。また、関数を使用して素数を判断するのも比較的簡単です。
問題解決コード:
#include<iostream>
using namespace std;
bool isprime (int a){
//自定义一个函数判断是否为素数
for(int i=2;i*i<=a;i++){
if(a%i==0){
return false;
}
}
return true;
}
int main() {
int n;
int sum=0;
cin>>n;
for(int i=5; i<=n; i++) {
if(isprime(i-2)&&isprime(i)){
sum++;
}
}
cout<<sum;
return 0;
}