发布网友 发布时间:2022-04-23 14:01
共1个回答
热心网友 时间:2023-10-17 03:22
1,本题源程序如下: #include<stdio.h> #include<math.h> main() { int a,b,c,d; scanf("%d",&a); for(b=3;b<=a/2;b+=2) //b为a分解后其中一个小于a/2的一个素数 { for(c=2;c<=sqrt(b);c++) //这个循环是判断b是不是素数,用2-b的开方之间的数去处 if(b%c==0) break; //如果其中有一个数可以整除b,就中断该循环 if(c>sqrt(b)) d=a-b; //循环后判断c如果c最后的值>sqrt(b),表示它不是中途用break else break; //来退出循环的,表示b是一个素数,如b是素数,则继续判断a-b是 for(c=2;c<=sqrt(d);c++) //否是素数,否则再换另一个b if(d%c==0) break; if(c>sqrt(d)) printf("%d=%d+%d\n",a,b,d); } } 本题分析如下: 1 为什么要a/2 如8他可以分为3 和5,这两个数肯定一个小于8/2,一个大于8/2 所以你要把a分为2个素数和,其中一个素数肯定会小于a/2 2 判断一个数是否是素数 如16=2*8=4*4 也就是说如果16不是一个素数,它就可以分为2个数相乘,而这两个数相乘又等于16,所以判断16是否是素数,只需要用2-16的开方(也就是4)来除以16,如果都不能整除,则16就是素数。