C语言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;
}