杭电-------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\n", x / 2);//因为找的加数都是素数,又是按顺序找的,所以重复 scanf("%d", &a); } return 0; }