24小时热门版块排行榜    

查看: 1634  |  回复: 7
本帖产生 4 个 程序强帖 ,点击这里进行查看

wangww2011

木虫 (著名写手)

[交流] Project Euler 45 欧拉工程 45 题 已有3人参与

好久没有人发了,我来接着发吧
三角数,五角数和六角数可以用下面的公式产生:

三角数                 Tn=n(n+1)/2                 1, 3, 6, 10, 15, ...
五角数                 Pn=n(3n-1)/2                 1, 5, 12, 22, 35, ...
六角数l                 Hn=n(2n-1)                 1, 6, 15, 28, 45, ...
可以证实 T285 = P165 = H143 = 40755.

请找到下一个同时是五角数和六角数的三角数。

PS 虽然没有什么意思,但是为了连续性,还是逐个发吧
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
dubo(金币+1): 欢迎讨论 2011-09-02 19:57:09
ben_ladeng: 2011-09-02 22:50:55
余泽成(程序强帖+1): 2011-09-04 23:38:45
matlab code ,暴力解
CODE:
%% Find the next triangle number that is also pentagonal and hexagonal.
% It can be verified that T285 = P165 = H143 = 40755.
% Triangle                   Tn=n(n+1)/2
% Pentagonal                   Pn=n(3n?1)/2
% Hexagonal                   Hn=n(2n?1)
% Elapsed time is 0.095221 seconds.
% ans =
%                 1533776805
function result = euler45()
tic;
n = 1000;
t = (1:n).*((1:n)+1)/2;
p = (1:n).*(3*(1:n)-1)/2;
h = (1:n).*(2*(1:n)-1);
result = max(h(ismember(h,t(ismember(t,p))))); % n<1000时最大的同时是t,p,h的数
while result<40775
    n = n*10;
    t = (1:n).*((1:n)+1)/2;
    p = (1:n).*(3*(1:n)-1)/2;
    h = (1:n).*(2*(1:n)-1);
    result = max(h(ismember(h,t(ismember(t,p)))));
end
toc;
end

matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
2楼2011-09-02 16:16:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tieer

木虫 (正式写手)

★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
dubo(金币+1): 欢迎讨论 2011-09-02 19:57:15
余泽成(金币+2, 程序强帖+1): 欢迎常来程序语言版 2011-09-04 23:38:55
自学了一段时间python,第一次做题啊,呵呵。
CODE:
# -*- coding: cp936 -*-
# Project Euler 45
# Tn=n(n+1)/2
# Pn=n(3n-1)/2
# Hn=n(2n-1)
# 递增六角数,验证其是否为三角及五角数
from math import sqrt
def isTriangle(t):
    if ((sqrt(8*t+1)-1)/2)%1==0:   #用六角数的值解得三角数公式的n值,验证其是否整数
        return True
def isPentagonal(p):
    if ((sqrt(24*p+1)+1)/6)%1==0: #同上
        return True
h=144
while h:
    m=h*(2*h-1)
    if isTriangle(m) and isPentagonal(m):
        print ('T%d, P%d, H%d,the number is: %d')%((sqrt(8*m-1)-1)/2,(sqrt(24*m+1)+1)/6,h,m)
        break
    else:
        h+=1

结果
T55384, P31977, H27693,the number is: 1533776805

PS:我都是在自学python,不是程序员科班出身的,有什么不对的幼稚的地方,各位多指教,呵呵,感激不尽

[ Last edited by tieer on 2011-9-3 at 23:23 ]
思考,让这个世界更有趣。
3楼2011-09-02 19:50:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wangww2011

木虫 (著名写手)

ben_ladeng: 2011-09-02 22:51:04
引用回帖:
3楼: Originally posted by tieer at 2011-09-02 19:50:39:
自学了一段时间python,第一次做题啊,呵呵,不会用BBcode,见谅。

# -*- coding: cp936 -*-
# Project Euler 45
# Tn=n(n+1)/2
# Pn=n(3n-1)/2
# Hn=n(2n-1)
# 递增六角数,验证其是否为三角及五角数
...

BBcode很容易使用,譬如你想显示代码
CODE:
[code]Your code[/code ]

注意其实应该没有空格,为[/code]
4楼2011-09-02 21:41:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tieer

木虫 (正式写手)


小木虫(金币+0.5):给个红包,谢谢回帖
引用回帖:
4楼: Originally posted by wangww2011 at 2011-09-02 21:41:53:
BBcode很容易使用,譬如你想显示代码
CODE:
[code]Your code[/code ]

注意其实应该没有空格,为[/code]

明白了,谢谢啊,呵呵,见笑
思考,让这个世界更有趣。
5楼2011-09-02 21:52:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wangww2011

木虫 (著名写手)

★ ★
余泽成(金币+2, 程序强帖+1): 谢谢参与讨论! 2011-09-04 23:39:48
python 偷懒版
CODE:
n=100000
Tn=[i*(i+1)/2 for i in range(285,n)]
Pn=[i*(3*i-1)/2 for i in range(165,n)]
Hn=[i*(2*i-1) for i in range(143,n)]
print set(Tn)&set(Pn)&set(Hn)

结果为
CODE:
set([40755, 1533776805L])

所以1533776805即为所求
6楼2011-09-03 09:41:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huycwork

金虫 (著名写手)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
余泽成(金币+2, 程序强帖+1): 谢谢参与讨论! 2011-09-04 23:40:11
起始三角数是不用求的撒~
CODE:
Hn = 2n(2n-1)/2 = (2n-1+1)(2n-1)/2 = T(2n-1)

这个式子说明六角数是三角数的子集,只需要验证三角数或者六角数的集合与五角数集合相交即可。
Perl版:
CODE:
#usr/bin/perl
print join ",", grep{(sqrt(24*$_+1)+1)/6 == int((sqrt(24*$_+1)+1)/6)}map{$_* (2*$_-1)} (143..30000);

NOTE:3楼那位同学很有新意地使用%1这样的求余,但是这个操作仅仅只对支持浮点数求余的语言才有效,据我所知,绝大多数的语言仅支持整数求余,像Perl里面就行不通。还是得挥刀先cut一下。
if-else也不是必须的,因为==本身返回一个bool值。
漩涡的中心有一块空地,空空的。
7楼2011-09-03 12:47:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tieer

木虫 (正式写手)


小木虫(金币+0.5):给个红包,谢谢回帖
引用回帖:
7楼: Originally posted by huycwork at 2011-09-03 12:47:13:
起始三角数是不用求的撒~
CODE:
Hn = 2n(2n-1)/2 = (2n-1+1)(2n-1)/2 = T(2n-1)

这个式子说明六角数是三角数的子集,只需要验证三角数或者六角数的集合与五角数集合相交即可。
Perl版:
[code]
#usr/ ...

呵呵,受教了,我这python是自学的,以前就学过一点点c的皮毛,呵呵,差的远呢,谢谢啊。
不过话说回来,你这招转换发现六角数和三角数的关系,确实很好啊,这样计算量少一半的,
思考,让这个世界更有趣。
8楼2011-09-03 23:15:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 wangww2011 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 0703化学调剂 ,六级已过,有科研经历 +4 曦熙兮 2026-03-15 4/200 2026-03-15 18:01 by JourneyLucky
[考研] 一志愿哈工大材料324分求调剂 +5 闫旭东 2026-03-14 5/250 2026-03-14 14:53 by 木瓜膏
[考研] 材料与化工(0856)304求B区调剂 +7 邱gl 2026-03-10 11/550 2026-03-14 12:18 by 邱gl
[考研] 306求调剂 +4 唐薏薏 2026-03-09 4/200 2026-03-14 01:19 by JourneyLucky
[基金申请] 有必要更换申报口吗 20+3 fannyamoy 2026-03-11 3/150 2026-03-14 00:52 by zhanghaozhu
[考研] 一志愿华中农业大学071010,总分三百二,求调剂 +3 困困困困坤坤 2026-03-10 3/150 2026-03-14 00:35 by JourneyLucky
[考研] 341求调剂 +3 番茄头--- 2026-03-10 3/150 2026-03-13 23:07 by JourneyLucky
[考研] 285 求调剂 资源与环境 一志愿北京化工大学 +3 未名考生 2026-03-10 3/150 2026-03-13 23:04 by JourneyLucky
[考研] 26调剂/材料科学与工程/总分295/求收留 +9 2026调剂侠 2026-03-12 9/450 2026-03-13 20:46 by 18595523086
[考研] 【考研调剂求收留】 +3 Ceciilia 2026-03-11 3/150 2026-03-13 20:18 by JourneyLucky
[考研] 【0856】化学工程(085602)313 分,本科学科评估A类院校化学工程与工艺,诚求调剂 +7 小刘快快上岸 2026-03-11 7/350 2026-03-13 16:06 by ruiyingmiao
[考研] 085600材料与化工 309分请求调剂 +7 dtdxzxx 2026-03-12 8/400 2026-03-13 14:43 by jxchenghu
[考研] 材料调剂,307分 +13 张泳铭1 2026-03-09 17/850 2026-03-13 11:09 by 薛云鹏
[考研] 282分材料专业求调剂院校 +18 枫桥ZL 2026-03-09 25/1250 2026-03-13 10:47 by 白夜悠长
[考研] 材料专硕274一志愿陕西师范大学求调剂 +4 薛云鹏 2026-03-13 4/200 2026-03-13 10:40 by 学员8dgXkO
[考研] 274求调剂0856材料化工 +12 z2839474511 2026-03-11 13/650 2026-03-13 10:39 by peike
[考研] 290求调剂 +3 ADT 2026-03-13 3/150 2026-03-13 10:19 by peike
[考研] 321求调剂(食品/专硕) +3 xc321 2026-03-12 6/300 2026-03-13 08:45 by xc321
[考研] 调剂 +5 呵唔哦豁 2026-03-10 5/250 2026-03-10 22:00 by 28375m
[考研] 294 英二数二物化 求调剂 +6 米饭团不好吃 2026-03-09 6/300 2026-03-09 23:55 by barlinike
信息提示
请填处理意见