Programming/Algorithm

[Python3] 제곱해서 같은 수 - 2

피터파스칼 2017. 3. 12. 22:23

n미만 자연수 중에 제곱해서 끝자리가 제곱한 자연수인 수를 찾아라

예를 들어 15를 제곱하면 225이고, 25는 15와 같지 않으니 이 조건에 만족하지 않는다.

 어제 제곱해서 같은 수 1을 올리고 좀더 빨리 계산할 수 없을까 쭉 고민했다.

 그러다, abcde가 위 조건에 만족하는 수라면 bcde도 위 조건에 만족하는 수라는 걸 착안해서 기억해서 풀게 만들어 봤다.

 또, 두개를 비교해야 하니 파이썬의 실행시간 측정코드도 넣었다 코드는 다음과 같다.

import time

start = time.time()

~~~코드 구간 ~~~

print(time.time() - start)

import time
start = time.time()
M = 1000000
"""
for i in range(1, M + 1):
if((i**2 - i) % 10**len(str(i)) == 0):
print(i)

#"""
num_list = [5, 6]
print(1)
for i in range(1, M + 1):
if(str(i)[-len(str(num_list[0])):] == str(num_list[0])):
if((i**2 - i) % 10**len(str(i)) == 0):
num_list[0] = i
print(i)
elif(str(i)[-len(str(num_list[1])):] == str(num_list[1])):
if((i**2 - i) % 10**len(str(i)) == 0):
num_list[1] = i
print(i)
print(num_list)
#"""
print(time.time() - start)

1번째 실행결과

C:\Python34\python.exe "C:/Documents and Settings/Administrator/PycharmProjects/num/num.py"

1

5

6

25

76

376

625

9376

90625

109376

890625

12.21875


Process finished with exit code 0

두번째 실행결과

C:\Python34\python.exe "C:/Documents and Settings/Administrator/PycharmProjects/num/num.py"

1

5

6

25

76

376

625

9376

90625

109376

890625

[890625, 109376]

24.1875


Process finished with exit code 0


 실행시간이 짧아질거라 기대했지만 M이 커질수록 두번째가 시간이 오래걸림을 알 수 있었다.