测试结果:
创新互联公司于2013年成立,是专业互联网技术服务公司,拥有项目成都做网站、成都网站制作网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元古交做网站,已为上家服务,为古交各地企业和个人服务,联系电话:13518219792
哥德巴赫猜想,请输入一个数n:
34
猜想:34=3+31
猜想:34=5+29
猜想:34=11+23
猜想:34=17+17
猜想:34=23+11
猜想:34=29+5
猜想:34=31+3
请按任意键继续. . .
代码:
#include "stdio.h"
#include "stdlib.h"
int isPrimeNumber(int n)
{
int i;
for(i=2;i=n/2;i++)
{
if(n%i==0)
return 0;
}
return 1;
}
int gotbaha(int n)
{
int i;
for(i=2;in;i++)
{
if(isPrimeNumber(i)isPrimeNumber(n-i))
{
printf("猜想:%d=%d+%d\n",n,i,n-i);
}
}
}
main()
{
int n;
printf("哥德巴赫猜想,请输入一个数n:\n");
scanf("%d",n);
gotbaha(n);
system("pause");
}
说明:楼主的思路很清晰,代码实现起来很顺手!
1:输入一个数n
2:哥德巴赫从2开始到n-1 一旦 i和n-i都是素数那么就打印出这个拆分结果
3:判断素数函数独立出来。
要显示不重复的:
哥德巴赫猜想,请输入一个数n:
34
猜想:34=3+31
猜想:34=5+29
猜想:34=11+23
猜想:34=17+17
请按任意键继续. . .
将int gotbaha(int n)
{
int i;
for(i=2;i=n/2;i++) 【i=n/2】即可
楼主好运!PS:Negamax编写!
#includestdio.h
#includemath.h
int prime(int n)
{int i;
if(n2)return 0;
for(i=2;i=sqrt(n);i++)
if(n%i==0)return 0;
return 1;
}
int main()
{
int x,i;
scanf("%d",x);
for(i=2;ix/2;i++)
if(prime(i)prime(x-i))
{
printf("%d=%d+%d\n",x,i,x-i);
return 0;
}
}
哇,这个问题已经被搁置4年了,我看到了就来答一下吧(虽然可能已经没人感兴趣了)
首先,听说哥德巴赫猜想已经被证明了,也就是不存在不成立的情况了,(可点击链接
)
然后是问题本身,如果真有不符合的,可以在for(m=3;m=k-3;m++)这个循环后面判断一下是否是循环到了尽头,即是否mk-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年前应该提问者是大一现在应该毕业了吧~哈哈
#include stdio.h
int isPrime(int);
int main() {
int n;
for (n = 4; n = 100; n += 2) {
int i;
for (i = 2; i = n / 2; i++)
if (isPrime(i) isPrime(n - i)) {
printf("%d = %d + %d\n", n, i, n - i);
break;return 0;}
int isPrime(int n) {int i;if (n 2)return 0;if (n == 2)
return 1;
else
for (i = 2; i * i = n; i++)
if (n % i == 0)
return 0;
return 1;
哥德巴赫1742年给欧拉的信中哥德巴赫提出了以下猜想:任一大于2的偶数都可写成两个质数之和。但是哥德巴赫自己无法证明它,于是就写信请教赫赫有名的大数学家欧拉帮忙证明,但是一直到死,欧拉也无法证明。因现今数学界已经不使用“1也是素数”这个约定,原初猜想的现代陈述为:任一大于5的整数都可写成三个质数之和。
欧拉在回信中也提出另一等价版本,即任一大于2的偶数都可写成两个质数之和。今日常见的猜想陈述为欧拉的版本。把命题"任一充分大的偶数都可以表示成为一个素因子个数不超过a个的数与另一个素因子不超过b个的数之和"记作"a+b"。1966年陈景润证明了"1+2"成立,即"任一充分大的偶数都可以表示成二个素数的和,或是一个素数和一个半素数的和"。
#include
void main( )
{
int i, j, k, IsPrime;
for(i = 4; i = 100; i += 2) /*偶数i从4到100*/
{
for(j = 2; j = i / 2; j++) /* 将j从2到i/2进行测试 */
{
for(k = 2, IsPrime = 1; (k = j / 2) IsPrime; k++) /*判断j是否为素数*/
if(j % k == 0) IsPrime = 0;
if(IsPrime) { /*如果j是素数*/
for(k = 2, IsPrime = 1; (k = (i - j) / 2) IsPrime; k++) /*判断i-j是否是素数*/
if((i - j) % k == 0) IsPrime = 0;
if(IsPrime) /*如果i-j也是素数,则找到了i的一个解,将其输出,下一个偶数i*/
{
printf("%d = %d + %d\t", i, j, i - j);
break;
}
}
}
}
}
除了printf与main外,没有用到其他任何的函数,楼主不妨试一试。
您好,#include "stdio.h"
#include "math.h"//是否是素数
int IsPrime(int n)
{
int i;
for (i=2;in/2;i++)
{
if(n%i==0)
return 0;
}
return 1;
}void Output(int n)
{
int i;
for(i = 2; i=n/2;++i)
{
if(IsPrime(i) IsPrime(n-i))
{
printf("%d=%d+%d\n",n,i,n-i);
break;
}
}
}
void main()
{
Output(107000);
printf("\n");
} IsPrime(int n)和Output(int n) 都是自定义函数,是写的人根据函数内容自己编写的。他们最后都可以在主函数中调用,其中if(IsPrime(i) IsPrime(n-i))和Output(107000) 都是他们的调用。if(IsPrime(i) IsPrime(n-i))的意思是:如果这个数i以及(n-i)都为素数,那么执行下面操作。(当IsPrime(i)为1时是素数,为0时为合数)Output(107000) 的结果为:printf("%d=%d+%d\n",n,i,n-i);即:输出107000这个数符合哥德巴赫猜想,他是哪两个质数的和。