EularProject 39:给周长推断构成直角三角形个数

华电北风吹
天津大学认知计算与应用重点实验室
完毕日期:2015/7/30

Integer right triangles
Problem 39
If p is the perimeter of a right angle triangle with integral length sides, {a,b,c}, there are exactly three solutions for p = 120.
{20,48,52}, {24,45,51}, {30,40,50}
For which value of p ≤ 1000, is the number of solutions maximised?
Answer:
840
Completed on Thu, 30 Jul 2015, 04:51
Go to the thread for problem 39 in the forum.
利用的性质
b+c=la
cb=a2la
a<=b<c
a+b>c
当中第二个性质整除a能够大大降低运算时间

__author__ = 'zhengyi'

def IsRightTriangle(abc):
    a2=pow(abc[0],2)
    b2=pow(abc[1],2)
    c2=pow(abc[2],2)
    temp=a2+b2-c2
    if temp==0:
        return 1
    else:
        if temp<0:
            return 0
        else:
            return -1

def Count(perimeter):
    count=0
    for a in range(1,perimeter//3):
        if pow(a,2)%(perimeter-a)!=0 or pow(a,2)//(perimeter-a)>=a:
            continue
        for b in range(max(perimeter//2-a,a),perimeter//2):
            temp=IsRightTriangle([a,b,perimeter-a-b])
            if temp==-1:
                break
            else:
                count+=temp
    return count

count=0
p=0
for i in range(1,1001):
    temp=Count(i)
    if temp>count:
        p=i
        count=temp

print(p)
原文地址:https://www.cnblogs.com/jhcelue/p/7258336.html