1007. 素数对猜想 (20)

原题: 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;
}

posted @ 2017-10-13 15:10  阿胜4K  阅读(322)  评论(0编辑  收藏  举报