有谁能解释下这个C语言说的是什么意思吗?

#include<stdio.h>#include<math.h>main(){inta,b,c,d;scanf("%d",&a);for(b=3;b<=a/2;b+=2... #include<stdio.h>
#include<math.h>
main()
{ int a,b,c,d;
scanf("%d",&a);
for(b=3;b<=a/2;b+=2)
{ for(c=2;c<=sqrt(b);c++) if(b%c==0)break;
if(c>sqrt(b))d=a-b; else break;
for(c=2;c<=sqrt(d);c++) if(d%c==0)break;
if(c>sqrt(d)) printf("%d=%d+%d\n",a,b,d);
}
getch();
}
这个程序功能是将键盘输入的偶数写成两个素数之和,但是我看不出来程序表达的意思,有大神帮忙讲下吗?
展开
 我来答
百度网友b36f72a
2013-05-03 · TA获得超过1417个赞
知道小有建树答主
回答量:744
采纳率:0%
帮助的人:548万
展开全部
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就是素数。
#include<stdio.h>
#include<stdio.h>
main()
{
int a,b,c,d;
scanf("%d",&a); //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);
}
}
提问前先百度
gbtux
2013-05-05
知道答主
回答量:47
采纳率:0%
帮助的人:15.6万
展开全部
#include<stdio.h>
#include<math.h>
main()
{ int a,b,c,d;
scanf("%d",&a); //要把输入的a值写成两个素数之和(即a=b+d)
for(b=3;b<=a/2;b+=2) //循环在范围[3, a/2]中找素数b,如果找到了,那么另一个素数就是a-b
{ for(c=2;c<=sqrt(b);c++) if(b%c==0)break; //测试b是否是素数(方法见后);
if(c>sqrt(b))d=a-b; //如果b是素数,那么另一数就是d=a-b
else break; //如果b不是素数,继续外部循环,找出一个素数;
for(c=2;c<=sqrt(d);c++) if(d%c==0)break; //在b是素数的前提下,测试另一个数d是否是素数;
if(c>sqrt(d)) printf("%d=%d+%d\n",a,b,d); //如果d是素数,那么功能完成,输出两个素数b和d,即a=b+d
}
getch();
}

上述程序中使用下面方法测试一个数b是否是素数:
for(c=2;c<=sqrt(b);c++) if(b%c==0)break;
循环在范围[2, 根号b]中尝试找出一个数,如果能被b整数(即取余为0),那么数b不为素数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式