有谁能解释下这个C语言说的是什么意思吗?
发布网友
发布时间:2022-02-28 23:52
我来回答
共2个回答
热心网友
时间:2022-03-01 01:21
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);
}
}
提问前先百度
热心网友
时间:2022-03-01 02:39
#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不为素数。