您的位置:首页 > 其它

5-13 素数对猜想   (20分)

2017-05-06 00:56 239 查看
让我们定义d​n​​为:dn
= p​(n+1)​​−p​n​​,其中p​i​​是第i个素数。显然有d​1​​=1,且对于n>1有d​n​​是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。

现给定任意正整数
N
(<105<10^5​​),请计算不超过
N
的满足猜想的素数对的个数。

输入格式:

输入在一行给出正整数
N


输出格式:

在一行中输出不超过
N
的满足猜想的素数对的个数。

输入样例:

20

输出样例:

4


解析:学会判断质数

#include <stdio.h>
#include <math.h>
int IsPrime( int n ) {
if ( n == 1 ) //1既不是质数也不是合数
return 0;
else if ( n == 2 ) // 2是合数
return 1;
else {
double k = sqrt(n);
int i;
//i <= k 比如 n = 25,k = 5; 25取余2,3,4,5;只有到5的时候才能判断它是合数
for ( i = 2; i <= k; i++ )
if ( n % i == 0 )
return 0;
}
return 1;
}
int main () {
int n, prime, lastPrime = 3, cnt = 0;
scanf("%d", &n);
if ( n < 5 ) //5之前不存在差为2的相邻素数对
printf("0");
else {
for ( prime = 5; prime <= n; prime += 2 ) //直接加2,因为偶数一定不是质数(除2)
if ( IsPrime(prime) ) {
if ( prime - lastPrime == 2)
cnt++;
lastPrime = prime; //更新上一个质数
}
printf("%d", cnt);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: