示例#1
0
def check_eq(a, b, c, d, num, den):
    if a % 10 == 0 and b % 10 == 0: return num, den
    if a / gcd(a, b) == c / gcd(c, d) and b / gcd(a, b) == d / gcd(c, d):
        num *= a
        den *= b
    return num, den
示例#2
0
    Given coprime positive integers m, n < m, with m - n odd, a pythagorean
    triple is formed with a = m*m - n*n, b = 2*m*n, c = m*m + n*n
All primitive pythagorean triples are formed with this generator, so multiplying
each one by k in (1, x) while a+b+c < 1000 forms all pythagorean triples where
p is less than 1000.

I generate every pythagorean triple, and store the number of times each perimeter
is generated.

Runs in ~ .1 seconds

"""

from utils.misc import gcd

perimeters = dict([(x, 0) for x in xrange(12, 1001)])
for m in xrange(2, 21):
    p = 12
    n = m%2 + 1
    while n < m and p <= 1000:
        if gcd(m, n) > 1:
            n += 2
            continue
        p = 2*m*m + 2*m*n
        k = 1
        while k*p <= 1000:
            perimeters[k*p] += 1
            k += 1
        n += 2
print max(perimeters, key=lambda k: perimeters[k])
示例#3
0
"""

from utils.misc import used_digits, gcd
from utils.primes import factor

num = 1
den = 1


def check_eq(a, b, c, d, num, den):
    if a % 10 == 0 and b % 10 == 0: return num, den
    if a / gcd(a, b) == c / gcd(c, d) and b / gcd(a, b) == d / gcd(c, d):
        num *= a
        den *= b
    return num, den


for i in xrange(10, 100):
    for j in xrange(i + 1, 100):
        if len(used_digits(i) & used_digits(j)) > 0:
            if i / 10 == j / 10:
                num, den = check_eq(i, j, i % 10, j % 10, num, den)
            elif i / 10 == j % 10:
                num, den = check_eq(i, j, i % 10, j / 10, num, den)
            elif i % 10 == j / 10:
                num, den = check_eq(i, j, i / 10, j % 10, num, den)
            else:
                num, den = check_eq(i, j, i / 10, j / 10, num, den)
print den / gcd(num, den)