注册 登录
编程论坛 C++教室

[讨论]你的编程能力的体现,Come on,Boy!

tianxing1985 发布于 2007-11-13 23:33, 1712 次点击
巴拿赫病故于1945年8月31日。他的出生年份恰好是他在世时某年年龄的平方,问:他是哪年出生的?这道看似很简单的数学问题,你能不能能快地解答呢?
下面则是一道世界第一大软件公司微软的招聘测试题:中间只隔一个数字的两个素数被称为素数对,比如5和7,17和19,证明素数对之间的数字总能被6整除(假设这两个素数都大于6),现在证明没有由三个素数组成的素数对。
18 回复
#2
nuciewth2007-11-14 00:00
1945之前的年份 会是哪个数的平方不是很明了
#3
nuciewth2007-11-14 00:02
44
#4
nuciewth2007-11-14 00:02
43 那年估计是没有出生的,他没这么长的寿.
#5
tianxing19852007-11-14 00:29

厉害!


#6
孤魂居士2007-11-14 00:37
用程序实现 还是口答啊?
龙哥 肯定强
#7
tangguobiao2007-11-14 00:50
怎么算的呀,请教下
#8
nuciewth2007-11-14 09:15
他的出生年份恰好是他在世时某年年龄的平方

下面来算
y=x^2;(1800<=y<=1945-x//单纯数学上是没有下界的,但人总不会活150岁吧)
42^2=1764 //如果他有勇气活这么长,我也没办法
43^2=1849;
44^2=1936;(这个不可能,因为1936+44>1945)

所以正确的还是43岁,昨天太急,看错了,呵呵。
#9
nuciewth2007-11-14 09:26
证明第二个的第一点:素数对之间的数字总能被6整除(假设这两个素数都大于6)
证明:
假设三个数分别是a,b,c,其中,a,c是素数。
1。很显然这个数是个偶数
2。假设a%3=1,则有c%3=0,这个不成立,因为c是素数.
3。假设a%3=2,c%3=1,很显然b%3=0.
4。假设a%3=0 ,不成立,因为a 是素数.
综上:b%6=0
#10
nuciewth2007-11-14 09:46
现在证明没有由三个素数组成的素数对。

反证:假设这五个数分别是a b c d e.其中a,c,e是三个连续素数对.
根据上面的推理有
a%3=2,c%3=1则e%3=2
c%3=2,则e%3=1
矛盾
所以假设不成立.
#11
a198705022007-11-14 11:17
#include <iostream.h>
int main(){
for(int bornyear=1800;bornyear<=1945;bornyear++){
for(int age=1945-bornyear;age>0;age--){
if(bornyear==age*age)
cout<<"出生年是"<<bornyear<<endl<<"恰好是他"<<age<<"岁时的平方"<<endl;
}
}
return 0;
}

之所以把出生年的初始值设为0,是因为我觉得一个人应该无140多岁吧~~~~
我是菜鸟,如果有什么不对的,还望指出,谢谢.
#12
tianxing19852007-11-14 13:45
可以
#13
jonc2007-11-14 14:50
厉害
#14
a198705022007-11-14 14:52
以下是引用a19870502在2007-11-14 11:17:46的发言:
#include <iostream.h>
int main(){
for(int bornyear=1800;bornyear<=1945;bornyear++){
for(int age=1945-bornyear;age>0;age--){
if(bornyear==age*age)
cout<<"出生年是"<<bornyear<<endl<<"恰好是他"<<age<<"岁时的平方"<<endl;
}
}
return 0;
}

之所以把出生年的初始值设为0,是因为我觉得一个人应该无140多岁吧~~~~
我是菜鸟,如果有什么不对的,还望指出,谢谢.

不好意思,讲错了.出生年的初始值是1800.

#15
tianxing19852007-11-15 22:24

我看到了,没事!

#16
无缘今生2007-11-15 22:45
以下是引用nuciewth在2007-11-14 9:46:48的发言:
现在证明没有由三个素数组成的素数对。

反证:假设这五个数分别是a b c d e.其中a,c,e是三个连续素数对.
根据上面的推理有
a%3=2,c%3=1则e%3=2
c%3=2,则e%3=1
矛盾
所以假设不成立.

回楼上,如果我没有理解错的话,以你的想法,上面红色的地方是不是应该是: c%3=0

#17
PcrazyC2007-11-16 11:37

假设某年的年龄是N,所以有150>1945-N^2>=N(假设人的年龄<150)

编个程序将N从40(345>150)开始循环,满足条件结束

#include<iostream>

using namespace std;

int main()
{
int n,a;
for(n=40;a=1945-n*n,!(a<150&&a>n);n++);
printf("%d",n*n);
return 0;
}

#18
PcrazyC2007-11-16 11:53
A,B,C是三个连续的数,且A ,C是素数,很显然B是一个偶数,即B%2==0;要证明B%6==0,只需证明B%3==0,用反证法,假设B%3==1;则A%3==0,不成立,假设B%3==2,则C%3==0,不成立,所以B%3==0,证毕.

由上可知,如果A,B,C中A,C是素数对,则B%3==0,C%3==1,如果有A,B,C,D,E五个连续的数,又由于C%3==1,所以E%3==0,所以E不是素数.所以不存在三素对.
#19
tianxing19852007-11-16 17:20
以下是引用PcrazyC在2007-11-16 11:53:37的发言:
A,B,C是三个连续的数,且A ,C是素数,很显然B是一个偶数,即B%2==0;要证明B%6==0,只需证明B%3==0,用反证法,假设B%3==1;则A%3==0,不成立,假设B%3==2,则C%3==0,不成立,所以B%3==0,证毕.

由上可知,如果A,B,C中A,C是素数对,则B%3==0,C%3==1,如果有A,B,C,D,E五个连续的数,又由于C%3==1,所以E%3==0,所以E不是素数.所以不存在三素对.

我明白你的思路了,谢谢!

1