当前位置:首页 » 编程语言 » 哥德巴赫猜想c语言问题讨论
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

哥德巴赫猜想c语言问题讨论

发布时间: 2023-07-29 03:47:09

‘壹’ c语言:验证哥德巴赫猜想:任何一个大于等于6的偶数均可表示为2个素数之和,例如6=3+3,8=3+5,....18=5+13

#include<stdio.h>
intprime(intn)
{
inti;
for(i=3;i*i<=n;i+=2)
if(!(n%i))return0;
returnn>1;
}
intmain()
{
intm,n,i;
scanf("%d,%d",&m,&n);
if(m<6)m=6;
if(m%2)m++;
for(;m<=n;m+=2)
for(i=3;i<=m/2;i+=2)
if(prime(i)&&prime(n-i))
printf("%d=%d+%d ",m,i,n-i);
return0;
}

‘贰’ 用C语言编程解决哥德巴赫猜想,输入一个大于六的偶数,输出该偶数能分为几对素数之和,以下代码错在何处

我来个完整的程序:

//哥德巴赫猜想:
//1.每个不小于6的偶数都是两个奇素数之和。(本程序要解决的问题)
//2.每个不小于9的奇数都是三个奇素数之和。
#include<stdio.h>
#include<conio.h>
#include<math.h>
intPrime(unsignedlongu){//判断u是否是素数,1是,0不是
unsignedlongi,k;
k=(unsignedlong)sqrt(u);//求u的开根号,作为判断素数整除数的上限
for(i=2;i<=k;++i){
if(u%i==0)return0;//遇到能整除的,不是素数
}
return1;
}
intmain(){
unsignedlongn,i,j,k;
printf("======GeDeBaHeCaiXiang(1)====== ");
do{
printf(" Inputn(>=6):");
scanf("%ld",&n);
if(n<6||n%2)break;//如果输入的数小于6,或为奇数,则退出
for(k=0,i=3;i<=n/2;i+=2){//循环选择第一个加数(是奇数)
if(!Prime(i))continue;//如果i不是素数,换过下一个数
j=n-i;
if(!Prime(j))continue;//如果j不是素数,换过下一个数
printf("%lu:%lu+%lu ",++k,i,j);//找到第k组解,输出
}
}while(1);
printf(" Finished! ");
getch();
return0;
}

希望对你有帮助。

‘叁’ 怎么用C语言编程验证哥德巴赫猜想

哇,这个问题已经被搁置4年了,我看到了就来答一下吧(虽然可能已经没人感兴趣了)

首先,听说哥德巴赫猜想已经被证明了,也就是不存在不成立的情况了,(可点击链接
http://tieba..com/p/542673904)

然后是问题本身,如果真有不符合的,可以在for(m=3;m<=k-3;m++)这个循环后面判断一下是否是循环到了尽头,即是否m>k-3,如果到了尽头都不符合,那就可以输出不符合了;
至于全部不符合的情况,由于前面已经逐项输出,已经打印的事实已经无法改变,因此就无法只输出说该范围内所有数都不符合,若真的要达到那种效果,可以把你要printf的先用fprintf函数打到临时创建的文件里,然后最后根据判断不符合的个数决定全部打印还是打印一条。总之是用文件读写是一种方法。

最后呢,如果说还要改进的话,有两点可以改进下——1,我从老师那里听来判断素数的条件可以再缩小一点,也就是文中的y=x/2,可以改为 y=sqrt(x)【因为sqrt(x)的平方=x,如果小于y的整数不符合,那么大于y的数也不会符合】;

2,类似于第一点 for(m=3;m<=k-3;m++)条件可改为m<=k/2;【理由同1】。

呃,就是这样了,不过4年前应该提问者是大一现在应该毕业了吧~哈哈

‘肆’ 用c语言验证哥德巴赫猜想

#include<stdio.h>

voidmain()

{intx,y,z;

inti,j;

for(x=4;x<100;x++,x++)//对100以内的偶数

for(y=1;y<x;y++)//y<x改成y<x/2就可以去掉8=3+58=5+3这类的重复了

{for(i=2;i<y;i++)//判断y是否为素数

if(y%i==0)break;
if(i==y)//y是素数


{z=x-y;//x=y+z

for(j=2;j<=z;j++)//判断z是否为素数


if(z%j==0)break;

if(j==z)//z是素数


printf("%d=%d+%d ",x,y,z);

}

}


printf(" ");

}

‘伍’ 哥德巴赫猜想!!!! C语言

一)设计思想:<br> <br>1:为了证明一个小于都2000的偶数,能被两个素数相加,首先求出1-2000内的所有素数,以方便相加,我们将保存在一个sushu[2000]数组中备用。<br> <br>2:从键盘输入一个偶数后在核心函数中处理,寻找合适的两个素数。<br> <br>3:输出结果。<br> <br> 二)流程图:<br> <br>(画不出来改成文字了)<br> <br>1:声明所需的变量及数组<br> 2:求出所有2000以内的素数保存在数组中备用。<br> 3:输入一个偶数,并在素数组中寻找合适的两个素数<br> 4:将结果输出<br> <br> 三)难重点及解决方法:<br> 1:2000以内的素数的求出,我们用了两个循环套来使得素数各方面条件都得到满足后保存入数组。<br> <br>2:查找满足的两个素数,为了能查到匹配的两个素数,我们也用了两个循环套来保证一个不漏的找到。<br> <br>四)核心内容:<br> 1:求素数的内容如下:<br> <br> s=ss=0;<br> <br> sushu[0]=2;<br> <br> xiabiao=1;<br> <br> for (int s=3;s<2000;s++)<br> {<br> for (int ss=2;ss<=s;ss++)<br> {<br> if (0==s%ss) break;<br> }<br> <br> if (s==ss) sushu[xiabiao++]=s;<br> }<br> <br>////////////////////////////////////////////////////<br> <br>2:查找匹配的两个素数的内容如下:<br> <br> for (s=0;s<xiabiao-1;s++)<br> {<br> for (ss=s+1;ss<xiabiao;ss++)<br> {<br> <br> <br> if (m_1==sushu[s]+sushu[ss])<br> <br>{ <br> m_2=sushu[s];<br> <br>m_3=sushu[ss];<br> <br>UpdateData(FALSE);<br> <br>return ;<br> }<br> }<br> <br> }<br> <br> 五)程序运行结果截图: