Project Euler 36-42

Project Euler: https://projecteuler.net/
Project Euler | 欧拉计划: https://pe-cn.github.io/
Project Euler 1-7
Project Euler 8-14
Project Euler 15-21 & 67
Project Euler 22-28
Project Euler 29-35
Project Euler 36-42
Project Euler 43-49
Project Euler 50-56
Project Euler 57-63
如果有错误,还望指出,欢迎互相交流学习
随缘更新

Problem 36: Double-base palindromes

Find the sum of all numbers, less than one million, which are palindromic in base 10 and base 2.

  • 可以只检查10进制回文数
def palindromes(num):
    num = str(num)
    for i in range(len(num)//2):
        if num[i] != num[-(i+1)]:
            return False
    return True

SUM = 0
for i in range(1000000):
    if palindromes(i) and palindromes(bin(i)[2:]):
        SUM += i
print(SUM)
872187

Problem 37: Truncatable primes

Find the sum of the only eleven primes that are both truncatable from left to right and right to left.

def is_primes(n):
    n = int(n)
    if n<=1:
        return False
    for j in range(2,int(n**0.5)+1):
        if n%j==0:
            return False
    else:
        return True
ans = []
for i in range(10,1000000):
    i = str(i)
    for j in range(len(i)):
        if (is_primes(i[j:]) and is_primes(i[0:j+1])) is False:
            break
    else:
        ans.append(int(i))
    if len(ans)==11:
        break
print(sum(ans))
748317

Problem 38: Pandigital multiples

What is the largest 1 to 9 pandigital 9-digit number that can be formed as the concatenated product of an integer with (1,2, … ,n) where n > 1?

def check(s):
    if len(str(s)) is not 9:
        return False
    return len(set(str(s).replace('0',''))) == 9

def link(number, max_multiplier):
    s = ''
    for i in range(1, max_multiplier+1):
        product = number * i;
        s += str(product)
    return s

ans = 0
max_number    = 10000 #max number 10000 when n=2

for number in range(9, max_number):
    for n in range(2, 6):
        s = link(number, n)
        if check(s):
            ans = max(largest_value, int(s))
print(ans)
932718654

Problem 39: Integer right triangles

For which value of p ≤ 1000, is the number of solutions maximised?

ans = {}
for i in range(1,1000):
    for a in range(1,i):
        for b in range(a,i-a):
            if a**2 + b**2 == (i-a-b)**2:
                if not i in ans:
                    ans[i] = []
                ans[i].append([a,b,i-a-b])
a = sorted(ans.items(), key=lambda x: len(x[1]), reverse=True)
print(a[0][0])
840

Problem 40: Champernowne’s constant

If d n d_n dn represents the n t h n^{th} nth digit of the fractional part, find the value of the following expression. d 1 × d 10 × d 100 × d 1000 × d 10000 × d 100000 × d 1000000 d_1 × d_{10} × d_{100} × d_{1000} × d_{10000} × d_{100000} × d_{1000000} d1×d10×d100×d1000×d10000×d100000×d1000000

s = ''
for i in range(1000001):
    s += str(i)
int(s[1])*int(s[10])*int(s[100])*int(s[1000])*int(s[10000])*int(s[100000])*int(s[1000000])
210

Problem 41: Pandigital prime

What is the largest n-digit pandigital prime that exists?

def f(s):
    if len(s) == 1:
        return s
    result = []
    for i in range(len(s)):
        sub = s[:i] + s[i+1:]
        for j in f(sub):
            result.append(s[i] + j)
    return result

def is_primes(n):
    n = int(n)
    if n<=1:
        return False
    for j in range(2,int(n**0.5)+1):
        if n%j==0:
            return False
    else:
        return True
def find():
    s = '987654321'
    for i in range(10):
        for num in f(s):
            if is_primes(int(num)):
                return int(num)
        s = s[1:]
find()
7652413

Problem 42: Coded triangle numbers

Using words.txt(right click and ‘Save Link/Target As…’), a 16K text file containing nearly two-thousand common English words, how many are triangle words?

f = open('data/p042_words.txt')
words = f.readlines()
f.close()
words = words[0][1:-1].split('","')

trinumber = [1]
n = 2
while trinumber[-1] < 26*6:
    trinumber.append(n*(n+1)//2)
    n += 1

ans = 0
for word in words:
    SUM = 0
    for s in word:
        SUM += ord(s) - 64
    if SUM in trinumber:
        ans += 1
print(ans)
162
Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐