鱼C论坛

 找回密码
 立即注册
查看: 2118|回复: 1

题目142:完全平方数集合

[复制链接]
发表于 2016-8-27 02:35:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Perfect Square Collection

Find the smallest x + y + z with integers x > y > z > 0 such that x + y, x − y, x + z, x − z, y + z, y − z are all perfect squares.


题目:

求满足  x + y, x − y,x + z,x − z,y + z,y − z 都是完全平方数,并且 x > y > z > 0 的最小的 x + y + z。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-26 11:00:02 | 显示全部楼层
先用代数转换:
x+y=a
x-y=b
x+z=c
x-z=d
y+z=e
y-z=f

x=(a+b)/2
y=(a-b)/2
z=c-x=c-(a+b)/2
d=x-z=(a+b)/2-c+(a+b)/2=a+b-c
e=y+z=(a-b)/2+c-(a+b)/2=c-b
f=y-z=(a-b)/2-c+(a+b)/2=a-c

由于a,b,c都是完全平方数,即可表示为a*a,b*b,c*c,同理求得d,e,f和x,y,z

用numba加速
from numba import jit
@jit
def p142():
        for a in range(3, 10000000):
                for c in range(2, a):
                        for b in range(1, c):
                                x = (a*a+b*b)/2
                                y = (a*a-b*b)/2
                                z = c*c-(a*a+b*b)/2
                                d = a*a+b*b-c*c
                                e = c*c-b*b
                                f = a*a-c*c
                                if int(d**0.5)**2 == d and int(e**0.5)**2 == e and int(f**0.5)**2 == f and x % 1 == 0 and y % 1 == 0 and z % 1 == 0 and z>0:
                                        return x+y+z
print(p142())

1006193.0
[Finished in 4.0s]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-7-2 22:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表