让我们定义d n 为:d n =p n+1 −p n ,其中p i 是第i个素数。显然有d 1 =1,且对于n>1有d n 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N(<10 5 ),请计算不超过N的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N。
输出格式:
在一行中输出不超过N的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
C++
主要在于理解素数对为相邻素数且相差2,以及判断素数的条件可以简化。
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int N;
cin >> N;
int num[N];
int n=1,nu=0;
for (int i=2;i<=N;i++)
{
int flag=0;
int k=(int)sqrt((double)i);//为了简化判断素数的条件
for (int j=2;j<=k;j++)
{
if (i%j==0)
{
flag=1;
break;
}
}
if (flag==0)
{
num[n]=i;//不大于N的素数
if (n>1)
{
int dn=num[n]-num[n-1];
if (dn/2==1) nu++;//题目条件:相邻素数相差2
}
n++;
}
else continue;
}
cout << nu;
return 0;
}
Python
from math import sqrt
n=int(input())
def prime(x):
Flag=True
if x==1 or x%2==0:
Flag=False
elif x>4:
for i in range(3,int(sqrt(x))+1):
if x%i==0:
Flag=False
break
return Flag
a=None
b=None
count=0
for i in range(1,n+1):
if prime(i):
a=b
b=i
if a!=None and b!=None and b-a==2:
count+=1
print(count)