C语言 下面程序的功能是将从键盘输入的偶数写成两个素数之和

2025-04-19 07:31:34
推荐回答(4个)
回答1:

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
#include
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);
}
}

回答2:

#include /*包含头文件*/
main() /*主函数*/
{
int a,b,c,d; /*定义整型变量*/
scanf("%d",&a); /*输入整数a,&是取地址的意思*/
for(b=3;b<=a/2;b+=2) /*for循环*/下面mdoom回答的很好,很详细。
{
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);
}
}

回答3:

mdoom回答的很详细了 呵呵
运行到a/2是值要运行到a的一半就可以了 如果你找到a/2还没找到 没有必要再找了 假设a>b>a
/2, 那么(c=a-b)运行到b的平方根是一个道理

回答4:

mdoom回答的很好