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