问题描述
德巴赫猜想:
任意一个大偶数都能分解为两个素数的和,
对与输入的一个正偶数,写一个程序来验证歌德巴赫猜想。
由于每个正偶数可能分解成多组素数和,仅输出分解值分别是最小和最大素数的一组,按从小到大顺序输出。
输入说明
输入一个正偶数n,1<n<1000。
输出说明
输出分解出的两个最小和最大素数。
输入样例
10
输出样例
3 7
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
int main()
{
int num;
scanf("%d",&num);
int m,i;
for (i=2;i<num;i++)
{
m=num-i;
int i;
int sign=0,sign1=0;//作为两数是否为素数的标记
for (i=2;i<=m-1;i++)
{
if(m%i==0)
break;
else
sign=1;
}
if(sign==1)
{
for (i=2;i<=num-m;i++)
{
if((num-m)%i==0)
break;
else
sign1=1;
}
if(sign1=1)
{
int min=0;
while (num-2*m>min)
{
min=num-2*m;
}
if(m<num-m)
printf ("%d %d",m,num-m);
}
}
}
return 0;
}
当我验证9时,就出现了3 6,但是正确结果应该时2 7,发现是判断素数那里的问题,求改正方法。
else sign=1是错的,其它错误也很多,比如i重复定义了,然后第二个for循环的结束条件也错了。
修改如下:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
int main()
{
int num;
scanf("%d",&num);
int m,i;
for (i=2;i<num;i++)
{
m=num-i;
int j;
int sign=1,sign1=1;//作为两数是否为素数的标记
for (j=2;j<=m-1;j++)
{
if(m%j==0)
{
sign = 0;
break;
}
}
if(sign==1)
{
for (j=2;j<=num-m-1;j++)
{
if((num-m)%j==0)
{
sign1=0;
break;
}
}
if(sign1==1)
{
int min=0;
while (num-2*m>min)
{
min=num-2*m;
}
if(m<num-m)
printf ("%d %d",m,num-m);
}
}
}
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!