c题目13:验证100以内的数是否满足哥德巴赫猜想。(任一大于2的偶数都可以写成两个质数之和)

每日小语

活下去的诀窍是:保持愚蠢,又不能知道自己有多蠢。------王小波

自己思考

即要让第一个质数与这个数减去第一个质数的值都为质数,所以要满足几个条件

1.a+b=c

2.a为质数

3.b为质数

这里是否可以用到我之前刚学的自己设置的那个判断质数的函数呢,我觉得完全可以。

复制代码
//100以内任意大于2的偶数都可写成两个质数之和
#include <stdio.h>

int IsPrime(int num)//输入参数是 num,即要判断的数
{
    int isPrime = 1;
    for (int i = 2; i < num; i++) 
        {
            if (num % i == 0) 
            {
                isPrime = 0;
                break;
            }
        }
    return 0;
}

int main()
{
    int num,prime;
        for(int i=2;i<100;i++)
        {
            IsPrime(prime);
            IsPrime(num-prime);
        }
    if(IsPrime(prime)==1&&IsPrime(num-prime)==1) 
    {
        printf("哥德巴赫猜想成立");
    }
    else
    {
        printf("不成立");
    }                       
    return 0;    
}

敲写的过程中我不知道如何用if来判断,虽然程序没有报错,可他给的结果是"不成立"。

gpt解答疑惑

1.IsPrime函数没有正确返回结果。在该函数中,我设置了一个名为isPrime的本地变量来表示是否为质数,但在函数末尾将其值始终返回为0,所以无法正确判断是否为质数。你应该根据isPrime变量的值返回正确的结果。

复制代码
int IsPrime(int num)
{
    int isPrime = 1;
    for (int i = 2; i < num; i++) 
    {
        if (num % i == 0) 
        {
            isPrime = 0;
            break;
        }
    }
    return isPrime;
}

return的不是0了,变成了Isprime???

gpt还是牛逼

复制代码
#include <stdio.h>

int IsPrime(int num)// 输入参数是 num,即要判断的数
{
    int isPrime = 1;
    for (int i = 2; i < num; i++) 
    {
        if (num % i == 0) 
        {
            isPrime = 0;
            break;
        }
    }
    return isPrime;
}

int main()
{
    int num;
    for (int i = 4; i <= 100; i += 2) // 因为猜想是任意大于2的偶数,所以从4开始遍历偶数
    {
        num = i;
        int found = 0; // 用于标记是否找到了两个质数之和等于当前偶数
        
        for (int prime = 2; prime <= num / 2; prime++) // 在质数范围内搜索两个质数之和
        {
            if (IsPrime(prime) == 1 && IsPrime(num - prime) == 1) 
            {
                printf("哥德巴赫猜想成立:%d = %d + %d\n", num, prime, num - prime);
                found = 1;
                break; // 找到了,则跳出内部循环
            }
        }
        
        if (found == 0)
        {
            printf("不成立:%d\n", num);
        }
    }
    
    return 0;
}

之前忽视了这个应该是偶数,还初始设置了一个found=0,改变它的值来判断。

然后还是需要两个for循环来判断,这一点我还是不理解。

复制代码
#include <stdio.h>

int IsPrime(int num)// 输入参数是 num,即要判断的数
{
    int isPrime = 1;
    for (int i = 2; i < num; i++) 
    {
        if (num % i == 0) 
        {
            isPrime = 0;
            break;
        }
    }
    return isPrime;
}

int main()
{
    int num;
    int found = 0; 
    for (int i = 4; i <= 100; i += 2) 
    {
        num = i;
        for (int prime = 2; prime <= num / 2; prime++)
        {
            if (IsPrime(prime) == 1 && IsPrime(num - prime) == 1) 
            {
                found = 1;
                break; 
            }
        }
    }    
    if (found == 0)
    {
        printf("不成立:%d\n", num);
    }
    else
    {
        printf("成立");
    }
    
    
    return 0;
}

以上这是精简代码。

第一个循环 用来遍历 4 到 100 之间的所有偶数

第二个循环验证是否存在两个质数的和等于 `num`。

嗯,得加紧学一下两个循环了,目前还是不理解怎么运作的。

复制代码
#include <stdio.h>

int IsPrime(int num)// 输入参数是 num,即要判断的数
{
    int isPrime = 1;
    for (int i = 2; i < num; i++) 
    {
        if (num % i == 0) 
        {
            isPrime = 0;
            break;
        }
    }
    return isPrime;
}

int main()
{
    int num;
    int found = 0; 
    for (int num = 4; num <= 100; num += 2) 
    {
        for (int prime = 2; prime <= num / 2; prime++)
        {
            if (IsPrime(prime) == 1 && IsPrime(num - prime) == 1) 
            {
                found = 1;
                break; 
            }
        }
    }    
    if (found == 0)
    {
        printf("不成立:%d\n", num);
    }
    else
    {
        printf("成立");
    }
    
    
    return 0;
}

最后为最精简代码,撒花花~

相关推荐
阿珊和她的猫2 小时前
v-scale-scree: 根据屏幕尺寸缩放内容
开发语言·前端·javascript
fouryears_234174 小时前
Flutter InheritedWidget 详解:从生命周期到数据流动的完整解析
开发语言·flutter·客户端·dart
我好喜欢你~5 小时前
C#---StopWatch类
开发语言·c#
lifallen6 小时前
Java Stream sort算子实现:SortedOps
java·开发语言
IT毕设实战小研6 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
cui__OaO8 小时前
Linux软件编程--线程
linux·开发语言·线程·互斥锁·死锁·信号量·嵌入式学习
鱼鱼说测试8 小时前
Jenkins+Python自动化持续集成详细教程
开发语言·servlet·php
艾莉丝努力练剑9 小时前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法
CHEN5_029 小时前
【Java基础面试题】Java基础概念
java·开发语言
Cx330❀10 小时前
【数据结构初阶】--排序(五):计数排序,排序算法复杂度对比和稳定性分析
c语言·数据结构·经验分享·笔记·算法·排序算法