引入:
让我们定义dn 为:dn = pn+1 −pn ,其中 pi 是第 i 个素数。显然有d1 = 1,且对于 n > 1有 dn 是偶数。“素数对猜想” 认为 “存在无穷多对相邻且差为 2 的素数” 。
现给定任意正整数 N
(< 105),请计算不超过 N
的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数 N
。
输出格式:
在一行中输出不超过 N
的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
分析:
题目要我们求素数对的个数。将除第一组素数对外的 相邻的且差为2的两个素数 视作一个素数对。特别地,第一组素数对为2和3,差为1。
给出一个输入样例为20,20以内的素数有2、3、5、7、11、13、17、19。
由此得到启示,我们用cnt记录素数对个数。对输入的n进行判断:
①如果n小于3,则cnt为0。
②如果n大于等于3,则将cnt初始化为1,代表第一组素数对,然后从5开始对于小于等于20的数进行遍历,为素数且 +2后得到的数 也为素数的记为一个素数对,cnt加1。
最后输出cnt。
注:第二个测试点对小于等于进行判定,记得是 i <= n
#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;
if(n >= 3)
{
cnt = 1;
for(int i = 7; i <= n; i++)
if(isprime(i) && isprime(i - 2)) //判断i及i+2是否为素数,若都是,cnt加1
cnt++;
}
cout << cnt;
return 0;
}
悄咪咪表白柳婼大佬