c题目9:证明1000以内的偶数可以写成两个质数之和

每日小语

心若没有栖息的地方,在哪都是流浪。——三毛

自己敲写

这里需要用到一个联系:oushu=prime1+prime2

这个问题在于将这个联系变换,用于让我们判断是否是质数,转换后可以方便清晰的理解,并且减掉一个变量。

这是我没有想到的。就如同分部积分一样,通过变换,将一个复杂的东西转换为一个简单的易懂的东西.

prime1=oushu-prime2,就是这么简单,但我想不到,这是老师给出的答案。

#include <stdio.h>

int main() 
{
    int IsPrime=0;
    
    for(int i=4;i<1000;i=i+2)//i是偶数,即和
    {
        for(int prime=2;prime<i;prime++)
        {
            for(int j=2;j<prime;j++)
            {
                if (prime%j!=0&&(i-prime)%j==0)
                {
                    IsPrime=1;
                    break;
                }
            }
        }
    }
    if(IsPrime=0)
    {
        printf("1000以内偶数可以写成两个质数之和");
    }
    else
    {
        printf("no");
    }
    return 0;
}

目前的代码是这样的可是它给我的是no,emmmmm我还是觉得不对

#include <stdio.h>

int main() 
{
    int IsPrime = 0;

    for (int i = 4; i < 1000; i = i + 2) // i是偶数,即和
    {
        IsPrime = 0; // 将IsPrime重置为0

        for (int prime = 2; prime < i; prime++)
        {
            int isPrime1 = 1;
            int isPrime2 = 1;

            for (int j = 2; j < prime; j++)
            {
                if (prime % j == 0)
                {
                    isPrime1 = 0; // prime不是质数
                    break;
                }
            }

            for (int j = 2; j < (i - prime); j++)
            {
                if ((i - prime) % j == 0)
                {
                    isPrime2 = 0; // (i - prime)不是质数
                    break;
                }
            }

            if (isPrime1 == 1 && isPrime2 == 1)
            {
                IsPrime = 1;
                break;
            }
        }

        if (IsPrime == 0)
        {
            printf("%d可以写成两个质数之和\n", i);
        }
    }

    return 0;
}

这个是gpt的代码,得需要和自己的对比分析一下。

就蛮气人的,怎么改都是no。

#include <stdio.h>

int main() 
{
    int IsPrime=1;
    for(int i=4;i<1000;i=i+2)//i是偶数,即和
    {
        //1.将IsPrime重置为0
        IsPrime=1;
        for(int prime=2;prime<i;prime++)
        {   
            for(int j=2;j<prime;j++)
            {
                if (prime%j==0&&(i-prime)%j==0)
                {
                    IsPrime=0;
                    break;
                }
            }
        }
    }
    if(IsPrime=0)
    {
        printf("1000以内偶数可以写成两个质数之和");
    }
    else
    {
        printf("no");
    }
    return 0;
}

基于gpt改了一下,可惜还是不对。

gpt又给了一个

#include <stdio.h>

// 判断一个数是否为质数
int isPrime(int num) {
    if (num <= 1) {
        return 0; // 不是质数
    }
    for (int i = 2; i * i <= num; i++) {
        if (num % i == 0) {
            return 0; // 不是质数
        }
    }
    return 1; // 是质数
}

int main() {
    printf("证明哥德巴赫猜想:1000以内的偶数可以写成两个质数之和\n");

    for (int evenNum = 4; evenNum <= 1000; evenNum += 2) {
        int found = 0; // 是否找到两个质数之和等于evenNum

        for (int prime1 = 2; prime1 <= evenNum / 2; prime1++) {
            int prime2 = evenNum - prime1;

            if (isPrime(prime1) && isPrime(prime2)) {
                found = 1;
                printf("%d = %d + %d\n", evenNum, prime1, prime2);
                break;
            }
        }

        if (!found) {
            printf("%d 无法写成两个质数之和\n", evenNum);
        }
    }

    return 0;
}

1.这个涉及到了一个提前设定函数的东西,我就不是很懂了。

在C语言中,你可以在程序的任何地方定义函数,包括在`main`函数外面。函数的定义告诉编译器如何执行函数的操作,但并不要求函数的定义必须在`main`函数之前或之后。这使得代码更模块化,可以将不同功能的代码分离开来,提高代码的可读性和维护性。

在你提供的代码中,`isPrime`函数的定义在`main`函数之前。这种组织结构使得程序更清晰,可以先定义所有的辅助函数,然后再定义主函数(`main`函数)。这样做有助于阅读和理解代码,同时也方便查找特定功能的实现。

就有太多个循环的情况下,脑子就不清晰了,之前做过质数题,就不需要再重新做了,就每次直接把它作为一个辅助函数拿来用就可以了。

2.!found:在C语言中,!found 表示逻辑非操作符,它用于对found变量的值取反。具体而言,!found的值在found为真(非零)时为假(0),而在found为假(0)时为真(1)。

这一次大抵多了一个提早设函数的一个知识,其他的也无碍了。

撒花花~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值