B1007 素数对猜想 (20 分)

让我们定义 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


思路:
1、根据素数的定义,找到小于 N 的所有素数。
2、通过 front 和 now 保存相邻的两个素数,并检验差是否为 2 。
3、可以通过 sqrt() 减少计算量。
4、如果不在意空间的花费,可以保存所有的素数,进一步减少计算。

#include<stdio.h>
#include<math.h>
#include<stdlib.h>

int main()
{
 	int i, j, n;
 	int front = 0, now = 0, count = 0;
 	
 	scanf("%d", &n);
 	for (i = 1; i <= n; i++)
 	{
 	 	for (j = 2; j <= sqrt(i); j++)
  		{
   			if (i % j == 0)
   			{
    				break;
   			}
  		}
  		if (j > sqrt(i))
  		{
   			front = now;
   			now = i;
   			if (now - front == 2)
   			{
    				count++;
   			}
  		}
 	}
 	printf("%d\n", count);
 	
 	system("pause");
 	return 0;
}

猜你喜欢

转载自blog.csdn.net/shiawaseli/article/details/89599551
今日推荐