欧拉计划 52

125874和它的二倍,251748, 包含着同样的数字,只是顺序不同。

找出最小的正整数x,使得 2x, 3x, 4x, 5x, 和6x都包含同样的数字。

import time


def get_digit(x):
    """ x各位上的数 """
    digit = []
    while x:
        digit.append(x % 10)
        x = x // 10
    return digit


# 1
t0 = time.time()
num = 1
while 1:
    digit_2 = get_digit(num * 2)
    digit_2.sort()
    for i in range(3, 7):
        digit_i = get_digit(num * i)
        digit_i.sort()
        if digit_2 != digit_i:
            break
    if digit_2 == digit_i:
        break
    num = num + 1
print(num)
t1 = time.time()
print(t1 - t0)


# 2
t0 = time.time()
num = 1
while 1:
    digit_2 = get_digit(num * 2)
    digit_2.sort()
    for i in range(3, 7):
        digit_i = get_digit(num * i)
        digit_i.sort()
        if digit_2 != digit_i:
            break
    if digit_2 == digit_i:
        break
    num = num + 1
    digit_num = get_digit(num)
    if digit_num[-1] == 2:
        num = 5 * 10 ** (len(digit_num) - 1)
print(num)
t1 = time.time()
print(t1 - t0)


# 3
t0 = time.time()
num = 1
while 1:
    digit_2 = get_digit(num * 2)
    if sum(digit_2) % 3 == 0 and (0 in digit_2 or 5 in digit_2):
        digit_2.sort()
        for i in range(3, 7):
            digit_i = get_digit(num * i)
            digit_i.sort()
            if digit_2 != digit_i:
                break
        if digit_2 == digit_i:
            break
    num = num + 1
    digit_num = get_digit(num)
    if digit_num[-1] == 2:
        num = 5 * 10 ** (len(digit_num) - 1)
print(num)
t1 = time.time()
print(t1 - t0)


# 4
t0 = time.time()
num = 3
while 1:
    digit_2 = get_digit(num * 2)
    if 0 in digit_2 or 5 in digit_2:
        digit_2.sort()
        for i in range(3, 7):
            digit_i = get_digit(num * i)
            digit_i.sort()
            if digit_2 != digit_i:
                break
        if digit_2 == digit_i:
            break
    num = num + 3
    digit_num = get_digit(num)
    if digit_num[-1] in [2, 3, 4]:
        num = 5 * 10 ** (len(digit_num) - 1) + 1
print(num)
t1 = time.time()
print(t1 - t0)


t0 = time.time()
num = 3
while 1:
    digit_2 = get_digit(num * 2)
    if 0 in digit_2 or 5 in digit_2:
        digit_2.sort()
        for i in range(3, 7):
            digit_i = get_digit(num * i)
            digit_i.sort()
            if digit_2 != digit_i:
                break
        if digit_2 == digit_i:
            break
    num = num + 3
print(num)
t1 = time.time()
print(t1 - t0)


t0 = time.time()
num = 3
while 1:
    digit_2 = get_digit(num * 2)
    if 0 in digit_2 or 5 in digit_2:
        digit_2.sort()
        for i in range(3, 7):
            digit_i = get_digit(num * i)
            digit_i.sort()
            if digit_2 != digit_i:
                break
        if digit_2 == digit_i:
            break
    num = num + 3
    if str(num)[0] in '234':
        num = 5 * 10 ** (len(str(num)) - 1) + 1
print(num)
t1 = time.time()
print(t1 - t0)

t0 = time.time()
num = 3
digit_len = 1
while 1:
    digit_2 = get_digit(num * 2)
    if 0 in digit_2 or 5 in digit_2:
        digit_2.sort()
        for i in range(3, 7):
            digit_i = get_digit(num * i)
            digit_i.sort()
            if digit_2 != digit_i:
                break
        if digit_2 == digit_i:
            break
    num = num + 3
    if num > 10 ** digit_len:
        digit_len += 1
    if int(num / 10 ** (digit_len - 1)) in [2, 3, 4]:
        num = 5 * 10 ** (digit_len - 1) + 1
print(num)
t1 = time.time()
print(t1 - t0)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值