让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N
(<105),请计算不超过N
的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N
。
输出格式:
在一行中输出不超过N
的满足猜想的素数对的个数。
输入样例:
20
结尾无空行
输出样例:
4
结尾无空行
解题思路:这道题解在最后一个测试点超时了,时间复杂度在O(n*n),总体来说题目不难掌握对素数的求解就ok了,剩下的就是如何让自己的代码在更短的时间跑出来
算法第六天
//题目的意思为求素数,并且素数相临之间为差为2,要求不超过N的素数
//先对素数进行计算
#include<iostream>
using namespace std;
int main(void)
{
int N = 0;
cin >> N;//N保证是正整数
if(N <= 3)//先对小于3的情况进行处理
{
cout <<"0"<<endl;
return 0;
}
int first = 3;//用记号标记上一个素数为first
int end = 0;
for(int i = 4 ; i <= N ; ++i)
{
for(int j = 2 ; j<=(i/2); ++j)//开始判断是不是素数
{
if(i%j==0)
{
//说明不是素数,直接找下一个数
break;
}
else if(j == i/2)
{
if((i - first)==2)
{
end++;
}
first = i;
}
}
}
cout << end <<endl;
return 0;
}