Disons qu'un nombre avec 1 à n utilisé une seule fois dans chaque chiffre est un nombre pandigital avec n chiffres: Par exemple, le nombre à 5 chiffres 15234 est un pandigital avec 1 à 5.
7254 a une propriété intéressante: écrivez 39 x 186 = 7254, et cela devient un panoramique numérique avec un nombre à multiplier, un nombre à multiplier et un produit de 1 à 9.
Trouvez la somme des produits telle que le nombre à multiplier / le nombre à multiplier / le produit est de 1 à 9 pan numérique.
CONSEIL: Certains produits ont une ou plusieurs combinaisons multiplication / multiplication / produit, mais ne comptent qu'une seule fois. http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2032
Il existe 9 numéros numériques Pan en raison de leur importance. Autrement dit, des nombres décimaux de 0 à moins de 9! Correspondent à chacun des nombres numériques de panoramique. La réponse est obtenue en convertissant le nombre décimal inférieur à 9! En un nombre numérique panoramique, en divisant le nombre numérique panoramique et en déterminant si la condition est satisfaite ou non. De plus, en faisant attention à HINT, la valeur du produit est stockée et le même calcul est exclu. (Il est probablement plus efficace de créer d'abord une fonction qui extrait simplement uniquement le produit. De plus, comme on peut voir à partir d'une simple considération que le produit à calculer ne peut pas être composé de 3 chiffres ou de 5 chiffres, le code suivant est mis à 4 chiffres.
import math
def create_pandigital(target,n,seeds):
ret = ''
while n > 0:
kaijo = math.factorial(int(n))
(q, r) = (target//kaijo, target%kaijo)
ret += str(seeds.pop(q))
target = r
n -= 1
return ret + str(seeds[0])
def main():
N = 10
MAX = math.factorial(int(N-1))
ans = 0
seeds = []
seq = range(1,N)
ls = []
for target in range(3,MAX):
seeds[:] = seq
n = N - 2
pan = create_pandigital(target, n, seeds)
for i in range(1,4):
if not (pan[:4] in ls) and int(pan[:4]) == (int(pan[4:4+i+1]) * int(pan[4+i+1:])):
ls.append(pan[:4])
ans += int(pan[:4])
break
print ans
main()
Recommended Posts