파이썬으로 수학문제 풀기- 프로젝트 오일러(project euler, 22번부터)

프로젝트 오일러 36번 문제 - 2진법 대칭숫자(Palindromes)

십진법의 숫자와 이진법으로 변환한 숫자 양쪽 모두 대칭(Palindrome)인 숫자를 찾는 문제입니다.

예를 들면, 십진수 585 는 이진수로 변환하면 1001001001 이고, 십진수와 이진수 양쪽 모두 대칭인 Palindrome 숫자입니다.

이런 성질을 만족하는 수를 백만까지 모두 찾는것이 문제입니다.

대칭검사 함수

대칭검사(palindrome)은 4번 문제에서 사용했던 코드입니다.

def is_palindrome(string):
    string2=string[::-1]
    if string2 == string :
        return True
    else:
        return False
print(is_palindrome("test"))
False

 

2진법 변환, 1000 까지 비교
def is_palindrome(string):
    string2=string[::-1]
    if string2 == string :
        return True
    return False

for i in range(1,1000):
    binary = str(bin(i))[2:]
    print(i, is_palindrome(str(i)), binary, is_palindrome(str(binary)))
1 True 1 True
2 True 10 False
3 True 11 True
4 True 100 False
5 True 101 True
6 True 110 False
7 True 111 True
8 True 1000 False
9 True 1001 True
10 False 1010 False
11 True 1011 False
...
...
989 True 1111011101 False
990 False 1111011110 False
991 False 1111011111 False
992 False 1111100000 False
993 False 1111100001 False
994 False 1111100010 False
995 False 1111100011 False
996 False 1111100100 False
997 False 1111100101 False
998 False 1111100110 False
999 True 1111100111 False

 

1,000,000 까지
# until 1,000,000

import time
start_time = time.time()

def is_palindrome(string):
    string2=string[::-1]
    if string2 == string :
        return True
    return False

total = 0
count = 0
for i in range(1,1000000):
    if is_palindrome(str(i)) and is_palindrome(bin(i)[2:]):
        print(i,bin(i)[2:])
        total+=i
        count+=1
print(total,count)
print("calculation time:", time.time()-start_time)
1 1
3 11
5 101
7 111
9 1001
33 100001
99 1100011
313 100111001
585 1001001001
717 1011001101
7447 1110100010111
9009 10001100110001
15351 11101111110111
32223 111110111011111
39993 1001110000111001
53235 1100111111110011
53835 1101001001001011
73737 10010000000001001
585585 10001110111101110001
872187 19
calculation time: 1.0120248794555664

댓글

댓글 본문
작성자
비밀번호
버전 관리
nomadlife
현재 버전
선택 버전
graphittie 자세히 보기