每日小语
心若没有栖息的地方,在哪都是流浪。——三毛
自己敲写
这里需要用到一个联系: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)。
这一次大抵多了一个提早设函数的一个知识,其他的也无碍了。
撒花花~













![[工业自动化-23]:西门子S7-15xxx编程 - 软件编程 - 西门子PLC人机界面交互HMI功能概述、硬件环境准备、软件环境准备](https://img-blog.csdnimg.cn/8c56162cda8943169cbc2aa132ce8452.png)





