杭电-------2098 分拆素数和(c语言写)

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


int sushu[10000] = { 2,0 };
int k = 0;//全局变量,用来标志此时已有多少个素数
int judge(int n) {//判断是否为素数
    int i;
    if (n == 2) {
        return 1;
    }
    for (i = 2; i <= sqrt(n); i++) {
        if (n%i == 0) {
            return 0;
        }
    }
    return 1;
}

int main() {
    int a;//所要输入的数
    scanf("%d", &a);
    int flsg;
    int i;
    int x;//所求数
    while (a != 0) {
        x = 0;
        if (a > sushu[k]) {//将素数存入数组中
            if (sushu[k] == 2) {
                i = sushu[k] + 1;
            }
            if (sushu[k] != 2) {//2已经存入数组
                i = sushu[k] + 2;
            }
            for (; i <= a; i = i + 2) {//可以从已找到的最大数组开始向后找
                                       //后面的至少为单数
                if (judge(i)) {
                    sushu[++k] = i;
                }
            }

        }
        for (i = 0; i <= k; i++) {//先找素数中的数,找到一个
            if (a < sushu[i]) {//加入的数越多,数组中保存的素数的值可能大于分解值,直接跳出
                break;
            }
            flsg = a - sushu[i];//减去之后判断剩下的数是否为素数
            if (judge(flsg) && sushu[i] != flsg) {
                x++;
            }
        }
        printf("%d
", x / 2);//因为找的加数都是素数,又是按顺序找的,所以重复
        scanf("%d", &a);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/lin0/p/8309625.html