Die Gleichheitssequenz 1487, 4817, 8147 mit einer Termdifferenz von 3330 hat zwei ungewöhnliche Eigenschaften:
(i) Jeder der drei Terme ist eine Primzahl. (ii) Jeder Begriff wird durch einen Ersatz eines anderen Begriffs dargestellt. Es gibt keine Zahlenfolge mit dieser Eigenschaft für 1-, 2- und 3-stellige Primzahlen, aber eine andere für 4-stellige Inkrementspalten.
Suchen Sie nun die 12-stellige Nummer, die die drei Begriffe in dieser Zahlenfolge verkettet. http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2049
Klicken Sie hier für 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