예제 #1
0
def solution():
    """
    Bryukh's solution
    >>> solution()
    [148748178147, 296962999629]
    """
    res = []
    pr_list = eratosthenes(10000)
    pr_list = pr_list[pr_list.index(1009):]
    while pr_list:
        pr = pr_list[0]
        pr_per = [
            int(''.join(var)) for var in permutations(str(pr))
            if int(''.join(var)) in pr_list
        ]
        pr_per = sorted(list(set(pr_per)))
        for x in pr_per:
            pr_list.remove(x)
        if len(set(pr_per)) < 3:
            continue
        for i in xrange(len(pr_per) - 2):
            for j in xrange(i + 1, len(pr_per) - 1):
                third = pr_per[j] + (pr_per[j] - pr_per[i])
                if third in pr_per:
                    res.append(pr_per[i] * (10**8) + pr_per[j] * (10**4) +
                               third)
    return res
예제 #2
0
def solution2(value=CONST):
    """
    Bryukh's solution
    four time calculation in one
    >>> solution(2)
    14
    >>> solution(3)
    644
    """
    def count_div(numb, lst):
        res = 0
        for pr in lst:
            if not numb % pr:
                res += 1
            if pr > numb/2:
                if not res:
                    res = 1
                break
        return res

    pr_list = eratosthenes(100000)
    x = 10
    x_divisors = [0] * value
    for i in range(value):
        x_divisors[i] = count_div(x+i, pr_list)
    while True:
        if all([xd==value for xd in x_divisors]):
            break
        x += 1
        x_divisors = x_divisors[1:] + [count_div(x+value-1, pr_list)]
    return x
예제 #3
0
파일: p37.py 프로젝트: Bryukh/euler
def solution():
    """
    Bryukh's solution
    """
    prime_list = eratosthenes(1000000)
    res = []
    for pr in prime_list:
        if (all([(int(str(pr)[i:]) in prime_list and
                    int(str(pr)[:i+1]) in prime_list)
                for i in xrange(len(str(pr)))])):
            res.append(pr)
    return sum(res[-11:])
예제 #4
0
파일: p37.py 프로젝트: Bryukh/euler
def solution():
    """
    Bryukh's solution
    """
    prime_list = eratosthenes(1000000)
    res = []
    for pr in prime_list:
        if (all([(int(str(pr)[i:]) in prime_list
                  and int(str(pr)[:i + 1]) in prime_list)
                 for i in xrange(len(str(pr)))])):
            res.append(pr)
    return sum(res[-11:])
예제 #5
0
파일: p69.py 프로젝트: Bryukh/euler
def solution(value=CONST):
    """
    Bryukh's solution
    n/φ(n) = (1-1/p1)(1-1/p2)...
    so maximum is maximum prime divisors
    >>> solution()
    510510
    """
    prlist = eratosthenes(100)
    res = 1
    for pr in prlist:
        if res * pr > value:
            return res
        res *= pr
예제 #6
0
파일: p69.py 프로젝트: Bryukh/euler
def solution(value=CONST):
    """
    Bryukh's solution
    n/φ(n) = (1-1/p1)(1-1/p2)...
    so maximum is maximum prime divisors
    >>> solution()
    510510
    """
    prlist = eratosthenes(100)
    res = 1
    for pr in prlist:
        if res*pr > value:
            return res
        res *= pr
예제 #7
0
파일: p51.py 프로젝트: Bryukh/euler
def solution(value=CONST):
    """
    Bryukh's solution
    We can check only 3 repeat numbers
    >>> solution()
    
    """
    prime_lst = [pr for pr in eratosthenes(999999) if repeating_digit(pr, 3)]
    for prime in prime_lst:
        templates = find_template(prime, 3)
        #print prime, template
        for temp in templates:
            gen_lst = generate_numb(prime, temp)
            count = sum([1 for gen in gen_lst if gen in prime_lst])
            if count >= 8:
                return prime
예제 #8
0
def solution(value=CONST):
    """
    Bryukh's solution
    We can check only 3 repeat numbers
    >>> solution()
    
    """
    prime_lst = [pr for pr in eratosthenes(999999) if repeating_digit(pr, 3)]
    for prime in prime_lst:
        templates = find_template(prime, 3)
        #print prime, template
        for temp in templates:
            gen_lst = generate_numb(prime, temp)
            count = sum([1 for gen in gen_lst if gen in prime_lst])
            if count >= 8:
                return prime
예제 #9
0
def solution(max_value=CONST):
    """
    Bryukh's solution
    """
    prime_lst = eratosthenes(max_value)
    res = 0
    len_res = 0
    for start in xrange(10):
        temp = 0
        for i in prime_lst[start:]:
            temp += i
            if temp > max_value:
                break
            if temp in prime_lst:
                if i - start > len_res:
                    len_res = i - start
                    res = temp
    return res
예제 #10
0
def solution():
    """
    Bryukh's solution
    >>> solution()
    5777
    """
    n = 7
    prime_lst = eratosthenes(100000)
    while True:
        n += 2
        if n in prime_lst:
            continue
        for pr in prime_lst:
            if n < pr:
                return n
            diff = n - pr
            if not diff % 2 and sqrt(diff // 2) == int(sqrt(diff // 2)):
                break
예제 #11
0
파일: p46.py 프로젝트: Bryukh/euler
def solution():
    """
    Bryukh's solution
    >>> solution()
    5777
    """
    n = 7
    prime_lst = eratosthenes(100000)
    while True:
        n += 2
        if n in prime_lst:
            continue
        for pr in prime_lst:
            if n < pr:
                return n
            diff = n - pr
            if not diff % 2 and sqrt(diff//2) == int(sqrt(diff//2)):
                break
예제 #12
0
파일: p50.py 프로젝트: Bryukh/euler
def solution(max_value=CONST):
    """
    Bryukh's solution
    """
    prime_lst = eratosthenes(max_value)
    res = 0
    len_res = 0
    for start in xrange(10):
        temp = 0
        for i in prime_lst[start:]:
            temp += i
            if temp > max_value:
                break
            if temp in prime_lst:
                if i - start > len_res:
                    len_res = i - start
                    res = temp
    return res
예제 #13
0
def solution1(value=CONST):
    """
    Bryukh's solution
    Try without primedivisors
    >>> solution(2)
    14
    >>> solution(3)
    644
    """
    pr_list = eratosthenes(100000)
    x = 10
    while True:
        x_divisors = [0] * value
        for i in range(value):
            for pr in pr_list:
                if not (x+i) % pr:
                    x_divisors[i] += 1
                if pr > (x+i)/2:
                    break
        if all([xd==value for xd in x_divisors]):
            break
        x += 1
    return x
예제 #14
0
파일: p60.py 프로젝트: Bryukh/euler
def solution():
    """
    Bryukh's solution
    >>> solution()
    26033
    """
    prlist = eratosthenes(10000)
    for p1 in prlist[:-4]:
        for p2 in prlist[prlist.index(p1)+1:-3]:
            if not_conc_prime(p1, p2):
                continue
            for p3 in prlist[prlist.index(p2)+1:-2]:
                if not_conc_prime(p1, p3) or not_conc_prime(p2, p3):
                    continue
                for p4 in prlist[prlist.index(p3)+1:-1]:
                    if (not_conc_prime(p1, p4) or not_conc_prime(p2, p4) or
                        not_conc_prime(p3, p4)):
                        continue
                    for p5 in prlist[prlist.index(p4)+1:]:
                        if (not_conc_prime(p1, p5) or not_conc_prime(p2, p5) or
                        not_conc_prime(p3, p5) or not_conc_prime(p4, p5)):
                            continue
                        return sum((p1, p2, p3, p4, p5))
예제 #15
0
파일: p60.py 프로젝트: Bryukh/euler
def solution():
    """
    Bryukh's solution
    >>> solution()
    26033
    """
    prlist = eratosthenes(10000)
    for p1 in prlist[:-4]:
        for p2 in prlist[prlist.index(p1) + 1:-3]:
            if not_conc_prime(p1, p2):
                continue
            for p3 in prlist[prlist.index(p2) + 1:-2]:
                if not_conc_prime(p1, p3) or not_conc_prime(p2, p3):
                    continue
                for p4 in prlist[prlist.index(p3) + 1:-1]:
                    if (not_conc_prime(p1, p4) or not_conc_prime(p2, p4)
                            or not_conc_prime(p3, p4)):
                        continue
                    for p5 in prlist[prlist.index(p4) + 1:]:
                        if (not_conc_prime(p1, p5) or not_conc_prime(p2, p5)
                                or not_conc_prime(p3, p5)
                                or not_conc_prime(p4, p5)):
                            continue
                        return sum((p1, p2, p3, p4, p5))
예제 #16
0
파일: p49.py 프로젝트: Bryukh/euler
def solution():
    """
    Bryukh's solution
    >>> solution()
    [148748178147, 296962999629]
    """
    res = []
    pr_list = eratosthenes(10000)
    pr_list = pr_list[pr_list.index(1009):]
    while pr_list:
        pr = pr_list[0]
        pr_per = [int(''.join(var)) for var in permutations(str(pr))
                    if int(''.join(var)) in pr_list]
        pr_per = sorted(list(set(pr_per)))
        for x in pr_per:
            pr_list.remove(x)
        if len(set(pr_per)) < 3:
            continue
        for i in xrange(len(pr_per)-2):
            for j in xrange(i+1, len(pr_per)-1):
                third = pr_per[j] + (pr_per[j] - pr_per[i])
                if third in pr_per:
                    res.append(pr_per[i]*(10**8) + pr_per[j]*(10**4) + third)
    return res