编写验证歌德巴赫猜想的函数?输入n〉6验证
编写验证歌德巴赫猜想的函数?输入n〉6验证 问题点数:10、回复次数:12Top
1 楼xiamin(夏敏)回复于 2006-03-07 11:28:25 得分 0
who can?Top
2 楼ugg(逸学堂(exuetang.net))回复于 2006-03-07 13:31:45 得分 0
没看懂......Top
3 楼lbing7(向青润老大学习!!!)回复于 2006-03-07 13:52:39 得分 0
数学上证明了?
那个猜想
..............
Top
4 楼lbing7(向青润老大学习!!!)回复于 2006-03-07 13:53:14 得分 0
我还以为你写出来了呢?
吓我一跳!Top
5 楼guogangj(无名小卒)回复于 2006-03-07 14:04:48 得分 4
哥德巴赫的猜想是这样的:所有的大于2的偶数,都可以表示为两个素数的和,比如4=2+2, 6=3+3,8=5+3, 10=7+3,12=7+5,14=11+3……而楼主要写的程序只是证明任意一个实例而已,并非让你用计算机攻破“1+1”,类似的题目以前多得了……通常,这是一个漫长的迭代过程,但我们可以考虑用空间换时间的做法,例如要证明100以内的偶数成立,就事先把100以内的奇数全部计算出来,存放在odd[N]数组中,然后逐个取出来,求目标偶数与这个奇数的差是也属于odd[N]中的元素,其实这个也需要迭代,很多的迭代,这是免不了的了,并且,如果要证明一个很大的偶数的话,可能需要很长的时间,或者很大的空间……程序限于时间,我暂时不写了。Top
6 楼ihcbo(☆心远☆)回复于 2006-03-07 14:17:43 得分 0
guogangj说得很有道理,支持!Top
7 楼imergang(二刚)回复于 2006-03-07 20:49:39 得分 0
?
Top
8 楼zh2817()回复于 2006-03-07 21:11:27 得分 6
#include<iostream.h>
#include<math.h>
void main()
{
long int m,n;
int k;
cout<<"输入一个大于6的整数:";
cin>>n;
for(int i = 6;i < n; i += 2)//对小于n的每一个偶数进行验证
{
for(m = 2;m <= i/2;m++)//循环A,将i分解成m和i-m
{
for(k = 2;m <= sqrt(m);k++)//循环B,判断m是不是素数
if(m % k == 0)
break;//如果m不是素数,则退出循环B
if(k <= sqrt(m)) continue;//如果m不是素数,则结束循环A的本次循环
for(k = 2;k <= sqrt(i - m);k++)//循环C,判断i-m是不是素数
if((i-m) % k == 0) break;//如果i-m不是素数,则退出循环C
if(k >sqrt(i - m)) break;//如果i-m是素数,则退出循环A
}
if(m == i/2 + 1)//如果对任何m<i/2,m、i-m不都是素数,则歌德巴猜想不成立
{
cout<<"偶数i不能表示为两个素数之和! \n";
break;
}
else
cout<<i<<"="<<m<<"+"<<i-m<<'\t';
if((i - 4) % 10 == 0)//一个输出5个等式
cout<<'\n';
}
cout<<'\n';
}
Top
9 楼xiamin(夏敏)回复于 2006-03-07 23:29:46 得分 0
搂主有误
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
long int m,n;
int k;
cout<<"输入一个大于6的整数:";
cin>>n;
for(int i = 6;i < n; i += 2)//对小于n的每一个偶数进行验证
{
for(m = 2;m <= i/2;m++)//循环A,将i分解成m和i-m
{
for(k = 2;k<= sqrt(m);k++)//循环B,判断m是不是素数
if(m % k == 0)
break;//如果m不是素数,则退出循环B
if(k <= sqrt(m)) continue;//如果m不是素数,则结束循环A的本次循环
for(k = 2;k <= sqrt(i - m);k++)//循环C,判断i-m是不是素数
if((i-m) % k == 0) break;//如果i-m不是素数,则退出循环C
if(k >sqrt(i - m)) break;//如果i-m是素数,则退出循环A
}
if(m == i/2 + 1)//如果对任何m<i/2,m、i-m不都是素数,则歌德巴猜想不成立
{
cout<<"偶数i不能表示为两个素数之和! \n";
break;
}
else
cout<<i<<"="<<m<<"+"<<i-m<<'\t';
if((i - 4) % 10 == 0)//一个输出5个等式
cout<<'\n';
}
cout<<'\n';
return 0;
}
Top
10 楼xiamin(夏敏)回复于 2006-03-07 23:34:22 得分 0
看看我写的!!!
#include<iostream>
#include<cmath>
using namespace std;
bool prime(int m)
{
for(int k = 2;k <= sqrt(m);k++)
{ if(m % k == 0)
break;//如果m不是素数,则退出循环
}
if(k>sqrt(m)) //如果m是素数
return true;
else
return false;
}
int main()
{
long int m,n;
int k;
cout<<"输入一个大于6的整数:";
cin>>n;
for(int i = 6;i < n; i += 2)//对小于n的每一个偶数进行验证
{
for(m = 2;m <= i/2;m++)//循环A,将i分解成m和i-m
{
if (prime(m)&&prime(i-m))
break;
}
if(m == i/2 + 1)//如果对任何m<i/2,m、i-m不都是素数,则歌德巴猜想不成立
{
cout<<"偶数i不能表示为两个素数之和! \n";
break;
}
else
cout<<i<<"="<<m<<"+"<<i-m<<'\t';
if((i - 4) % 10 == 0)//一个输出5个等式
cout<<'\n';
}
cout<<'\n';
return 0;
}Top
11 楼xiamin(夏敏)回复于 2006-03-07 23:34:42 得分 0
如何??
Top
12 楼wowo05(不要怕,不要只是幻想,尊重别人,《JAVA》,不断学习,共同进步,)回复于 2006-03-08 09:14:00 得分 0
upTop




