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)