注册 登录
编程论坛 C语言论坛

c语言多重循环

frecklesss 发布于 2020-03-26 09:54, 4383 次点击
哥德巴赫猜想:任何一个大于6的偶数均可表示为两个素数之和。输入两个整数m,n(),将m,n之间的偶数表示成两个素数之和。例如偶数M=a+b,其中a和b是素数,且a<b,a是所有成立的等式中最小的素数(例如:10=3+7,10=5+5,则只保留前面的式子)。
示例:
输入格式:8 10
输出格式:8=3+5;10=3+7;(注意:式子中所有符号均为英文状态下的符号)

以下是我的代码:

程序代码:
#include<stdio.h>
int main(){
    long int m,n,a,b,c,j;   
    scanf("%ld %ld" , &m,&n);   
    b=m;   
    for(a=3;a<c;a++)    {   
         b=m-a;
         c=n-a;      
         for(j=2;j<=a-1;j++)   {   
            if(a%j==0)        
            break;   
        }   
        if(j<a)continue;      
        for(j=2;j<=b-1;j++)   {   
           if(b%j==0)        
           break;   
        }   
        if(j<b)continue;  
        for(j=2;j<=c-1;j++)   {   
           if(c%j==0)        
           break;   
        }   
        if(j<c)continue;
        printf("%ld=%ld+%ld;%ld=%ld+%ld;",m,a,b,n,a,c);   
        break;   
    }   
    return 0;
}


可是我交作业的时候就会提示这个,怎么解决呢?
只有本站会员才能查看附件,请 登录
21 回复
#2
rjsp2020-03-26 10:13
我拿你的代码编译,编译就失败

int main(){
    long int m,n,a,b,c,j;   
    scanf("%ld %ld" , &m,&n);   
    b=m;   
    for(a=3;a<c;a++)    {  // 这里的c未初始化
#3
forever742020-03-26 10:29
仔细审题,重新写
#4
frecklesss2020-03-26 11:41
回复 2楼 rjsp
只有本站会员才能查看附件,请 登录

我可以编译呢
#5
frecklesss2020-03-26 11:42
回复 3楼 forever74
是判断素数那里出错了吗
#6
frecklesss2020-03-26 12:32
回复 2楼 rjsp
程序代码:
#include<stdio.h>
int main(){
    int m,n,a,b,c,j;   
    scanf("%d %d",&m,&n);      
    for(a=3;a<c;a++)    {         
         for(j=2;j<=a-1;j++)   {   
            if(a%j==0)        
            break;   
        }   
        b=m-a;
        c=n-a;      
        for(j=2;j<=b-1;j++)   {   
           if(b%j==0)        
           break;   
        }   
        for(j=2;j<=c-1;j++)   {   
           if(c%j==0)        
           break;   
        }   
        printf("%d=%d+%d;%d=%d+%d;",m,a,b,n,a,c);   
        break;   
    }   
    return 0;
}


改了一下,还是有问题。。。
#7
frecklesss2020-03-26 12:36
回复 7楼 frecklesss
不是上面的,是这个:

程序代码:
#include<stdio.h>
int main(){
    int m,n,a,b,c,j;   
    scanf("%d %d",&m,&n);   
    b=m;
    c=n;   
    for(a=3;a<c;a++)    {         
         for(j=2;j<=a-1;j++)   {   
            if(a%j==0)        
            break;   
        }   
        b=m-a;
        c=n-a;      
        for(j=2;j<=b-1;j++)   {   
           if(b%j==0)        
           break;   
        }   
        for(j=2;j<=c-1;j++)   {   
           if(c%j==0)        
           break;   
        }   
        printf("%d=%d+%d;%d=%d+%d;",m,a,b,n,a,c);   
        break;   
    }   
    return 0;
}
#8
叶纤2020-03-26 12:52
我编译器是正确的啊
#9
forever742020-03-26 12:59
按题目要求,如果输入 5 101
程序应该输出从6到100的48个偶数的表达式。
所以需要的改动很大,不如重新写。
#10
frecklesss2020-03-26 13:04
回复 9楼 forever74
懂了,意思是如果m=a+b,a和b是要程序算出来不是我写出来,是这个意思吗?
可是我不知道怎么做救救孩子
#11
Z10202020-03-26 13:54
#include<stdio.h>
int main()
{   
    int prime(int i);
    int m,n,i,j;//(m,n)为范围 ,i,j用于循环
    scanf("%d%d",&m,&n);
    for(i=m;i<=n;i++)
    {
        if(i%2==0)//判断是否是偶数
             for(j=2;j<i-1;j++)
                 if(prime(j)==1&&prime(i-j)==1)
                 {
                     printf("%d=%d+%d",i,j,i-j);
                     printf(";");
                     break;
                }
                     
    }
}
int prime(int a)//判断是否为素数
{
    int i,j=1;
    for(i=2;i<a;i++)
        if(a%i==0)
            j=0;
    return j;
}
你看这样是对的吗
#12
Z10202020-03-26 13:57
回复 11楼 Z1020
如果输入的m<=6,就加上这句话
if(m<=6)
        m=8;
#13
frecklesss2020-03-26 16:10
回复 9楼 forever74
改了还是不对啊

程序代码:
#include<stdio.h>
int main(){
    int count,i,j,k,m,n,number;
    scanf("%d%d",&m,&n);
    if(m%2!=0)
    m+=1;
    if(m>=6){
for(i = m; i <= n; i+=2) {
for(j = 2; j <= i/2; j++) {
number= 1;
for(k=2;k<j;k++)
if(j%k==0) number = 0;
for(k=2;k<i-j;k++)
if((i-j)%k==0) number = 0;
if(number == 1) {
printf("%d=%d+%d ", i, j, i-j);
break;
}
}
}
}
}
#14
frecklesss2020-03-26 16:13
回复 12楼 Z1020
哇!真的对了!太感谢了
老师让用嵌套循环做,我怎么改都不对
#15
return_02020-03-26 16:13
加油
#16
return_02020-03-26 16:15
比六小要特殊考虑,这个可以作为解题经验
#17
return_02020-03-26 16:16




















#18
Z10202020-03-26 16:19
回复 14楼 frecklesss
哈哈哈同小白,一起加油!!
#19
frecklesss2020-03-26 16:22
这个是老师的答案分享一下

程序代码:
#include<stdio.h>
int main()
{
     int m,n,k,t,i,x,count=0;
     scanf("%d%d",&m,&n);
     for(k=m;k<=n;k++)    //k取中间任何一个值
     {
      if(k%2==0)   //k是偶数才计算
      for(t=3;t<k/2;t+=2)     //素数2,是唯一偶数,不可能,否则偶数减去偶数剩下也是偶数了
        {
         for(i=2;i<t;i++)   //从t=3开始作为一个和数  
           if(t%2==0)
             break;
         if(i==t)
             {
              x=k-t;    //当t是素数的情况下,判断另外一个和数k-t是否素数
              for(i=2;i<x;i++)
                 if(x%i==0)
                   break;
                 if(i==x)
                    {
                      printf("%d=%d+%d;",k,t,x);
                      break;    //找到一对和数成立后就停止寻找
                    }
             }
        }
     }
  return 0;  
}
#20
return_02020-03-26 16:24
回复 19楼 frecklesss
你可以让你的老师把代码写美观点
#21
return_02020-03-26 16:25
超级嵌套后面很常见
#22
frecklesss2020-03-26 16:25
回复 16楼 return_0
嗯嗯\(^o^)/
1