巴巴鲁 发表于 2020-8-10 12:48:02

验证:偶数=素数+素数

程序是验证每个偶数能表示为两个素数的和,偶数不用太大
但是只有4,2时才能输出,其他都不能,这个程序哪里错了呢?

#include <stdio.h>
#include <math.h>
int length;
int su(int n);
int main(void)
{
                int array = {0};
                int i, j;
                int num;
                printf("请输入一个偶数:");
                scanf("%d",&num);
               
                for(i = 2; i <= 100; i++)
                {
                        if(su(i))
                        {
                                array = i; // 将素数存到数组里
                        }
                }
               
                if(num == 2)
                {
                        printf("2 = 1 + 1\n");
                }
               
                for(i = 0; i < length; i++)
                {
                        for(j = 0; j < length; j++)
                        {
                                if(num == array + array)
                                {
                                        printf("%d = %d + %d\n",num, array, array);
                                }
                                if(num > array + array)
                                {
                                        break; // num大时执行下轮循环
                                }
                        }
                }
               
                system("pause");
                return 0;
}

int su(int n)
{
                int j;
                for(j = 2; j < n; j++)
                {
                        if(n % j == 0)
                        {
                                return 0;
                        }
                }
                return 1;
}

sunrise085 发表于 2020-8-10 12:48:03

本帖最后由 sunrise085 于 2020-8-10 13:23 编辑

帮你修改了
第36行,应该是两个数之和超过num的时候执行下一次循环
另外你的length没有赋初值

#include <stdio.h>
#include <math.h>
int length;
int su(int n);
int main(void)
{
    int array = {0};
    int i, j;
    int num;
    length=0;
    printf("请输入一个偶数:");
    scanf("%d",&num);
   
    for(i = 2; i <= 100; i++)
    {
      if(su(i))
      {
            array = i; // 将素数存到数组里
      }
    }

    if(num == 2)
    {
      printf("2 = 1 + 1\n");
    }
   
    for(i = 0; i < length; i++)
    {
      for(j = 0; j < length; j++)
      {
            if(num == array + array)
            {
                printf("%d = %d + %d\n",num, array, array);
            }
            if(num < array + array)//这里是不对的。应该是两个数之和超过num的时候执行下一次循环
            {
                break; // num大时执行下轮循环
            }
      }
    }
   
    system("pause");
    return 0;
}

int su(int n)
{
    int j;
    for(j = 2; j < n; j++)
    {
      if(n % j == 0)
      {
            return 0;
      }
    }
    return 1;
}

Cool_Breeze 发表于 2020-8-10 13:55:03

本帖最后由 Cool_Breeze 于 2020-8-10 14:11 编辑

偶数 = 16
成立 16 = 5 + 11
不成立 16 = 10 + 6
对吗?
偶数= 2
1和0既非素数也非合数 #百度百科写的
2 是偶数

没有理解题意!

巴巴鲁 发表于 2020-8-10 17:58:26

sunrise085 发表于 2020-8-10 12:48
帮你修改了
第36行,应该是两个数之和超过num的时候执行下一次循环
另外你的length没有赋初值

对对,迷了{:10_277:}。
length是全局变量啊

巴巴鲁 发表于 2020-8-10 17:59:57

Cool_Breeze 发表于 2020-8-10 13:55
偶数 = 16
成立 16 = 5 + 11
不成立 16 = 10 + 6


对的,所以我判定了一下输入的偶数是不是2,这个题感觉也是有毛病
页: [1]
查看完整版本: 验证:偶数=素数+素数