summaryrefslogtreecommitdiff
path: root/euler104.py
blob: 5ec15b41c2e99aa16a30b48a42e30f00fadde06d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/usr/bin/env python

from math import log10,sqrt

fn_1 = 1
fn_2 = 1
n = 3

def pandigital(n):
    a = [False] * 10
    while n > 0:
        t = n % 10
        if t == 0:
            return False
        if a[t]:
            return False
        a[t] = True
        n = n / 10
    return True

while True:
    fn = (fn_1 + fn_2) % 1000000000
    if fn > 100000000 and pandigital(fn):
        # a[n] = pow((1+sqrt(5))/2, n)/sqrt(5) 
        #      - pow((1-sqrt(5))/2, n)/sqrt(5)
        log10_fn = n*log10((1+sqrt(5))/2) - log10(sqrt(5))
        frac = log10_fn - int(log10_fn)
        first9 = int(pow(10, frac)*100000000)
        if pandigital(first9):
            print(n)
            break

    fn_2 = fn_1
    fn_1 = fn
    n = n + 1