您的位置:首页 > 其它

1007. 素数对猜想 (20)

2017-10-13 15:10 381 查看

原题: https://www.patest.cn/contests/pat-b-practise/1007

关于素数判断C语言实现请参考:
http://www.cnblogs.com/asheng2016/p/7647278.html

分析题意: 题目是让我们得出

[2, n]
中所有的素数对个数, 例如
2 3 5 7 11 13 17 19
,
那么输出
4
.

实现思路: 比较直接的方法就是先把

[2, n]
所有的素数拿出来, 单门放到另一个数组中, 然后
两两循环判断差值是否为2, 从而确定有多少个素数对.
第2种方法是, 每次把当前素数的值保存下来, 等循环到下个素数时, 作差值比较是否等于2, 从而
确定一个素数对. 下面的代码使用第2种方法实现.

完整代码:

#include <stdio.h>

int isPrime (int n);

int main () {
int pre = 3; // 保存前一个素数的值
int result = 0; // 素数对个数
int i;
int n;

scanf("%d", &n); // 输入的n若果小于5, 直接返回0, 这是我们人工判断
for (i=5; i<=n; i++) {
if (isPrime(i) == 1) {
if ((i - pre) == 2) {
result += 1;
}
pre = i; // 只要当前的i为素数, 我们就更新pre的值
}
}
printf("%d\n", result);

return 0;
}

// 是返回1, 不是返回0
int isPrime (int n) {
int i = 2;
int flag = 1; // 默认n是素数
while (i * i <= n) {
if (n % i == 0) {
flag = 0;
break;
}
i++;
}
return flag;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: