1007 素数对猜想 (20分)
让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数。显然有d1 =1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N(<105 ),请计算不超过N的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N。
输出格式:
在一行中输出不超过N的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
/这道题方法很多,也很简单,可以先把所有N以内的素数存起来判断,也可以边遍历边判断(我就是这种方法,三个if搞定代码简单,占用内存也少,推荐这个方法)/
/写完以后第五个点出现了超时的情况,网上搜了下,问题出在我判断素数的时候,循环过程是从2到x/2(其实用2到sqrt(x)就可以了,sqrt(x)后面的都是重复的)导致超时了。/
/解决方法:求素数时,不必从2到x-1(x/2也会超时)去循环,只需2到sqrt(x)即可,否则最后一测试点会超时/
#include <stdio.h>
int ss(int x)
{
if(x==1 || x==2 || x==3 )
return 1;
for(int j=2;j<=sqrt(x);j++)
{
if(x%j==0)
return 0;
}
return 1;
}
int main()
{
int N,count=0;
scanf("%d",&N);
for(int i=1;i<=N-2;i++)
{
if(ss(i))
if(!ss(i+1))
if(ss(i+2))
count++;
}
printf("%d\n",count);
return 0;
}
/*这道题方法很多,也很简单,可以先把所有N以内的素数存起来判断,也可以边遍历边判断(我就是这种方法,三个if搞定代码简单,占用内存也少,推荐这个方法)*/
/*写完以后第五个点出现了超时的情况,网上搜了下,问题出在我判断素数的时候,循环过程是从2到x/2(其实用2-sqrt(x)就可以了,sqrt(x)后面的都是重复的)导致超时了。*/
/*解决方法:求素数时,不必从2到x-1(x/2也会超时)去循环,只需2到sqrt(x)即可,否则最后一测试点会超时*/