尤拉計畫 36

2021-07-25 13:17:27 字數 1411 閱讀 4626

十進位制數字585 = 1001001001 (二進位制),可以看出在十進位制和二進位制下都是回文(從左向右讀和從右向左讀都一樣)。

求100萬以下所有在十進位制和二進位制下都是回文的數字之和。

(注意在兩種進製下的數字都不包括最前面的0)

import math

defis_palindrome

(x):

""" x是否回文 """

x_str = str(x)

if x_str != x_str[::-1]:

return

false

x_bin = bin(x).replace('0b','')

if x_bin != x_bin[::-1]:

return

false

return

true

defis_palindrome_bin

(x):

""" 二進位制數是否回文 """

x_bin = bin(x).replace('0b','')

if x_bin != x_bin[::-1]:

return

false

return

true

# 直接計算

print(sum([i for i in range(1, 10 ** 6) if is_palindrome(i)]))

# 位數判斷

# 拼接十進位制數為回文,在判斷二進位制數是否回文

palindrome_sum = 0

# 首尾只能是奇數

odd_list = list(range(1, 10, 2))

for i in odd_list:

# 1位數

if is_palindrome_bin(i):

palindrome_sum += i

# 2位數

if is_palindrome_bin(i * 11):

palindrome_sum += i * 11

# 3~7位數

for digit in range(3, 7):

for i_1 in odd_list:

for i_mid in range(10 ** (math.ceil(digit / 2) - 1)):

i_mid_str = str(i_mid).zfill(math.ceil(digit / 2) - 1)

i_str = str(i_1) + i_mid_str + i_mid_str[:digit // 2 - 1][::-1] + str(i_1)

i = int(i_str)

if is_palindrome_bin(i):

palindrome_sum += i

print(palindrome_sum)

尤拉計畫36題

double base palindromes problem 36 the decimal number,585 10010010012 binary is palindromic in both bases.find the sum of all numbers,less than one mi...

尤拉計畫 6

前十個自然數的平方和是 1 2 2 2 10 2 385 前十個自然數的和的平方是 1 2 10 2 552 3025 所以平方和與和的平方的差是3025 385 2640.找出前一百個自然數的平方和與和平方的差。def get square sub x 遞迴,展開行列式 if x 1 return...

尤拉計畫 14

以下迭代序列定義在整數集合上 n n 2 當n是偶數時 n 3n 1 當n是奇數時 應用以上規則,並且以數字13開始,我們得到以下序列 13 40 20 10 5 16 8 4 2 1 可以看出這個以13開始以1結束的序列包含10個項。雖然還沒有被證明 collatz問題 但是人們認為在這個規則下,...