鱼C论坛

 找回密码
 立即注册
查看: 968|回复: 4

[已解决]验证:偶数=素数+素数

[复制链接]
发表于 2020-8-10 12:48:02 | 显示全部楼层 |阅读模式
15鱼币
程序是验证每个偶数能表示为两个素数的和,偶数不用太大
但是只有4,2时才能输出,其他都不能,这个程序哪里错了呢?
#include <stdio.h>
#include <math.h>
int length;
int su(int n);
int main(void)
{
                int array[100] = {0};
                int i, j; 
                int num;
                printf("请输入一个偶数:");
                scanf("%d",&num);
                
                for(i = 2; i <= 100; i++)
                {
                        if(su(i))
                        {
                                array[length++] = i; // 将素数存到数组里 
                        }
                }
                
                if(num == 2)
                {
                        printf("2 = 1 + 1\n");
                }
                
                for(i = 0; i < length; i++)
                {
                        for(j = 0; j < length; j++)
                        {
                                if(num == array[i] + array[j])
                                {
                                        printf("%d = %d + %d\n",num, array[j], array[i]);
                                }
                                if(num > array[i] + array[j])
                                {
                                        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;
}
最佳答案
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[100] = {0};
    int i, j; 
    int num;
    length=0;
    printf("请输入一个偶数:");
    scanf("%d",&num);
    
    for(i = 2; i <= 100; i++)
    {
        if(su(i))
        {
            array[length++] = i; // 将素数存到数组里 
        }
    }

    if(num == 2)
    {
        printf("2 = 1 + 1\n");
    }
    
    for(i = 0; i < length; i++)
    {
        for(j = 0; j < length; j++)
        {
            if(num == array[i] + array[j])
            {
                printf("%d = %d + %d\n",num, array[j], array[i]);
            }
            if(num < array[i] + array[j])//这里是不对的。应该是两个数之和超过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;
}

最佳答案

查看完整内容

帮你修改了 第36行,应该是两个数之和超过num的时候执行下一次循环 另外你的length没有赋初值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[100] = {0};
    int i, j; 
    int num;
    length=0;
    printf("请输入一个偶数:");
    scanf("%d",&num);
    
    for(i = 2; i <= 100; i++)
    {
        if(su(i))
        {
            array[length++] = i; // 将素数存到数组里 
        }
    }

    if(num == 2)
    {
        printf("2 = 1 + 1\n");
    }
    
    for(i = 0; i < length; i++)
    {
        for(j = 0; j < length; j++)
        {
            if(num == array[i] + array[j])
            {
                printf("%d = %d + %d\n",num, array[j], array[i]);
            }
            if(num < array[i] + array[j])//这里是不对的。应该是两个数之和超过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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-10 13:55:03 | 显示全部楼层
本帖最后由 Cool_Breeze 于 2020-8-10 14:11 编辑

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

没有理解题意!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

对对,迷了
length是全局变量啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-8-10 17:59:57 | 显示全部楼层
Cool_Breeze 发表于 2020-8-10 13:55
偶数 = 16
成立 16 = 5 + 11
不成立 16 = 10 + 6

对的,所以我判定了一下输入的偶数是不是2,这个题感觉也是有毛病
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 07:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表