题目描述
思路分析
- 找出不超过
N
( ≤ 1 0 5 \leq10^5 ≤105)的所有的质数存入数组P
。- 找出所有满足式子 P n + 1 − P n = 2 P_{n+1}-P_{n} = 2 Pn+1−Pn=2的
n
的个数,输出即可。
代码编写
#include<iostream>
#include<vector>
using namespace std;
bool sushu(int num){
//判断是否为素数
for (int i = 2; i*i <= num; i++){
if (num%i == 0)
return false;
}
return true;
}
int main(){
int N, j = 0;
cin >> N;
vector<int> P;
for (int i = 3; i <= N; i++){
if (sushu(i)){
//如果是素数放入P中
P.push_back(i);
}
}
//判断是否为素数对,并统计个数输出cout
int count = 0;
for (int i = 1; i < P.size(); i++){
if (P[i] - P[i-1] == 2)
count++;
}
cout << count;
return 0;
}
其中因为P的下标一直越界所以无法编译成功,把
i=0
改成i=1
就好了!vector
插入使用push_back()
函数,不是和数组一样赋值,还是要继续继续熟悉vector
的使用!
在网上看到了更简洁的代码,哎自己写的都是啥啊!根本不用开数组存啊!直接判断就好了!
#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, cnt = 0;
cin >> N;
for (int i = 5; i <= N; i++)
if (isprime(i-2) && isprime(i)) cnt++;
cout << cnt;
return 0;
}