24小时热门版块排行榜    

查看: 770  |  回复: 4

holmescn

金虫 (正式写手)

[交流] Euler 工程 第四十四题 已有3人参与

五角数的通项(n) = n(3n-1)/2, 前10个五角数:
1, 5, 12, 22, 35, 51, 70, 92, 117, 145, ...
其中可见P(4) + P(7) = 22 + 70 = 92 = P(8), 但P(4)-P(7) = 48却不是一个五角数.

找一对五角数P(i), P(j), 满足它们的和和差都还是五角数. 且差的绝对值最小,  求它们的差的绝对值.

PS: 怎么感觉是个数学题啊.
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wangww2011

木虫 (著名写手)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
xzhdty(金币+2): 欢迎常来 2011-07-19 17:06:32
ben_ladeng: 2011-08-02 08:07:16
暴力破解吧 实现起来最简单  虽然没有任何计算含量
CODE:
import math
p=[1]
n=1

def isPentagonal(a):
    b=(1+math.sqrt(1+24*a))/6
    if b-int(b)==0:
        return True
    else:
        return False

flag=True
while flag:
    n=n+1
    p.append(int(n*(3*n-1)/2))
    for i in range(n-2,-1,-1):
        n1=p[n-1]+p[i]
        n2=p[n-1]-p[i]
        if isPentagonal(n1) and isPentagonal(n2):
            print(n2)
            flag=False
            break

结果为 5482660

[ Last edited by wangww2011 on 2011-7-19 at 12:01 ]
2楼2011-07-19 11:57:41
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tieer

木虫 (正式写手)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
dubo(金币+1): 欢迎常来程序语言版讨论 2011-07-31 21:11:56
看着像是数学题,可是实在却找不到解法啊,连压缩范围都做不到,呵呵,期待高手吧,
思考,让这个世界更有趣。
3楼2011-07-19 15:44:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
xzhdty(金币+2): 谢谢 2011-07-19 17:07:00
c的
// 5482660
CODE:
#include
#include
#include

using namespace std;

bool isPentNum(int n)
{
    float x = (sqrt((float)(24*n+1))+1)/6;
    if(int(x)==x)
        return true;
    else
        return false;
}


int main()
{
    bool flag = false;
    int i=1,j=1;

    for(i=1; i<10000000; ++i)
    {
        if(isPentNum(i))
        {
            //cout << "i: " << i << endl;

            for(j=1; j             {
                //cout << "j: " << j << endl;

                if(isPentNum(j))
                {
                    if(isPentNum(i-j) && isPentNum(i+j))
                    {
                        cout << "Done!" << i-j << endl;
                        flag = true;
                        break;
                    }

                }
            }

            if(flag)
                break;
        }
    }

    return 0;
}

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

holmescn

金虫 (正式写手)


jjdg(金币+1): 感谢你的积极参与 2011-07-21 10:08:36
我也暴力一下:
CODE:
p = [n*(3*n-1)/2 for n in xrange(1,10000)]
d = p[-1]
p = set(p)

for x in p:
    for y in p:
        if x + y in p and x - y in p and x != y:
            if abs(x-y) < d:
                d = abs(x-y)

print d

这样的数对,在五角数中是对偶的, 也就是如果(P(I),P(J))的和和差分别是P(M), P(N),, 则(P(M), P(N))的和和差分别是P(I) , P(J)
5楼2011-07-19 16:42:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 holmescn 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见