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

时间:2021-05-14 20:45:52
#include<stdio.h>
#include<math.h> int sushu[] = { , };
int k = ;//全局变量,用来标志此时已有多少个素数
int judge(int n) {//判断是否为素数
int i;
if (n == ) {
return ;
}
for (i = ; i <= sqrt(n); i++) {
if (n%i == ) {
return ;
}
}
return ;
} int main() {
int a;//所要输入的数
scanf("%d", &a);
int flsg;
int i;
int x;//所求数
while (a != ) {
x = ;
if (a > sushu[k]) {//将素数存入数组中
if (sushu[k] == ) {
i = sushu[k] + ;
}
if (sushu[k] != ) {//2已经存入数组
i = sushu[k] + ;
}
for (; i <= a; i = i + ) {//可以从已找到的最大数组开始向后找
//后面的至少为单数
if (judge(i)) {
sushu[++k] = i;
}
} }
for (i = ; i <= k; i++) {//先找素数中的数,找到一个
if (a < sushu[i]) {//加入的数越多,数组中保存的素数的值可能大于分解值,直接跳出
break;
}
flsg = a - sushu[i];//减去之后判断剩下的数是否为素数
if (judge(flsg) && sushu[i] != flsg) {
x++;
}
}
printf("%d\n", x / );//因为找的加数都是素数,又是按顺序找的,所以重复
scanf("%d", &a);
}
return ;
}