求解思路:
1.生成10个随机数
srand((unsigned )time(NULL));//随机数种子不能放到循环内
num = rand()%100+3;
全部代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
int getPri(int n);
int getNum();
int main(){
srand((unsigned )time(NULL));
int i=1,num;
while (i++<=10){
num = getNum();
for (int a = 3; a < num; ++a) {//3是最小的奇素数,所以从3开始判断
for (int b = a; b < num; ++b) {
for (int c = b; c < num; ++c) {
if((a+b+c)==num&& getPri(a)&& getPri(b)&& getPri(c)){//随机组合三个数,其和等于num并且每个数都是奇素数
printf("%d = %d + %d + %d\n", num, a, b, c);
//条件成立时,跳出三个for循环(方法有待优化),此处只要一个结果
a = num;
b = num;
c = num;
}
}
}
}
}
return 0;
}
int getPri(int n){
if(n%2 == 0){//判断奇数
return 0;
}
for (int i = 2; i < sqrt(n); ++i) { //判断是否为素数
if(n%i == 0){
return 0;
}
}
return 1;
}
int getNum(){
int num,flag=1;
while (flag){
num = rand()%100+2;
if(num%2!=0||num>3){
flag = 0;
}
}
return num;
}