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이 커질수록 두번째가 시간이 오래걸림을 알 수 있었다.