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