//编程实现1+1猜想:输入合数x,找出和数为x(x为合数,x>3)的两个素数.我的编程错在哪?

来源:百度知道 编辑:UC知道 时间:2024/05/30 03:13:23
//编程实现1+1猜想:输入合数x,找出和数为x(x为合数,x>3)的两个素数
#include<stdio.h>
#include<math.h>
void main()
{
int a,b,c,i,k,s,m,n;
printf("请输入一个合数:");
printf("m=");
scanf("%d",&m);
n=sqrt(m);
for(i=2;i<=n;i++)
if(m%i==0) break;
if(i>n)
{
printf("请重输:"); //判断m是不是合数//
printf("m=");
scanf("%d",&m);
}
a=m/2;
c=sqrt(a);
for(i=2;i<=a;a=a-1)
{
for(i=2;i<=c;i++)
if(a%i==0) break;
if(i>c)
{
b=m-a;
s=sqrt(b);
for(k=2;k<=s;k++)
if(b%k==0) break;
if(k>s)
{
printf("a=%d\n",a);
printf("b=%d\n",b);
printf("%d+%d=%d\n",a,b,m);
}
}
}
main();
}

看晕了^-^

注意判断是否是素数时,排除7%7=0的情况。sqrt这里也改掉了,要用的话,注意论证。

修改版代码如下:

#include<stdio.h>
#include<math.h>
int main()
{
int a,b,c,i,j,k,s,m,n;

printf("请输入一个合数:");
printf("m=");
scanf("%d",&m);
n=sqrt(m);

for(i=2;i<=n;i++)
if(m%i==0) break;
if(i>n)
{
printf("请重输:"); //判断m是不是合数//
printf("m=");
scanf("%d",&m);
}
a=m/2;
c=sqrt(a);
for(i=2;i<=a;a=a-1)
{
for(j=2;j<a;j++)
if(a%j==0 && a!=2 && j)
{
break;
}
if(j>=a)
{
b=m-a;
for(k=2;k<b;k++)
if(b%k==0 && b !=2){
break;