Le nombre 1406357289 est un nombre pan-numérique de 0 à 9 (car 0 à 9 apparaissent une fois). Ce nombre a une propriété de sous-chaîne intéressante.
Soit d1 le premier chiffre et d2 le second chiffre, et définissons dn dans l'ordre suivant. En utilisant cette notation, nous pouvons voir ce qui suit.
d2d3d4 =406 est divisible par 2
d3d4d5 =063 est divisible par 3
d4d5d6 =635 est divisible par 5
d5d6d7 =357 est divisible par 7
d6d7d8 =572 est divisible par 11
d7d8d9 =728 est divisible par 13
d8d9d10 =289 est divisible par 17
Trouvez la somme des nombres pan-numériques de 0 à 9 avec cette propriété. http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2043
Le codage a été effectué à l'aide du générateur de nombres numériques Pan créé précédemment. Mais c'est assez tard.
# coding: utf-8
import copy
import math
def pandigital(digit,seq1,seq2=[]):
iter1 = map(str,seq1)
if seq2:
iter2 = map(str,seq2)
else:
iter2 = copy.deepcopy(iter1)
for d in range(digit-1):
iter1 = (x+y for x in iter1 for y in iter2 if not (y in x))
return iter1
def is_divisible(n):
div_list = [2, 3, 5, 7, 11, 13, 17]
for d in range(2,9):
if (int(n[d-1:d+2]) % div_list[d-2]) != 0:
return False
return True
def main():
digit = 10
ans = 0
for pdg in pandigital(digit,range(digit),range(digit)):
if is_divisible(pdg):
ans += int(pdg)
print ans
Recommended Posts