La séquence d'égalité 1487, 4817, 8147 avec une différence de terme de 3330 a deux propriétés inhabituelles:
(i) Chacun des trois termes est un nombre premier. (ii) Chaque terme est représenté par le remplacement d'un autre terme. Il n'y a pas de séquence de nombres avec cette propriété pour les nombres premiers à 1, 2 et 3 chiffres, mais il y en a une autre pour les colonnes d'incrément à 4 chiffres.
Trouvez maintenant le nombre à 12 chiffres qui concatène les trois termes de cette séquence de nombres. http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2049
Cliquez ici pour mymath https://github.com/cof01/ProjectEuler/blob/master/mymath.py
# coding: utf-8
import math
from mymath import get_primes,is_prime
def count_numbers(n):
ret = {i:0 for i in range(10)}
for s in str(n):
ret[int(s)] += 1
return ret
def check(p,diff,pri):
p1, p2, p3 = p, p+diff, p+diff*2
if not is_prime(p2, pri):
return False
if not is_prime(p3, pri):
return False
if count_numbers(p1) == count_numbers(p2) == count_numbers(p3):
return True
else:
return False
def main():
MIN, MAX = 10**3, 10**4
pri = get_primes(MAX)
ans = []
for p in pri['list']:
if p <= MIN:
continue
for diff in range(2, (MAX-p)//2, 2):
if check(p,diff,pri):
ans.append([p, p+diff, p+diff*2])
break
print ans
main()
Recommended Posts