https://programmers.co.kr/learn/courses/30/lessons/12928#
def solution(n):
sqrt = int(n**(1/2))
answer = 0
for i in range(1,sqrt+1):
if n % i == 0:
if i**2 == n:
answer += i
break
answer += i + n//i
return answer
예를 들어 12의 약수를 구한다면
1, 2, 3, 4, 6, 12
인데
12의 제곱근까지만 약수를 구하면
1, 2, 3
이고 얘네들은 4, 6, 12 과 짝임을 알 수 있다.
따라서 제곱근 까지만 약수를 구해도 된다..
만약 9의 약수를 구한다면..
1, 3, 9
로 약수의 개수가 홀수이고 제곱근 까지 약수를 구한다면
1, 3
이때 3은 짝이 없으므로 예외 처리가 필요하다
def solution(n):
sqrt = int(n**(1/2)) # n의 제곱근
answer = 0 # 약수의 합을 저장하는 변수 선언
for i in range(1,sqrt+1): # 1부터 n의 제곱근 까지의 수 에서
if n % i == 0: # n가 i로 나누어 떨어진다면 i는 n의 약수
if i**2 == n: # 만약 약수의 갯수가 홀수라면
answer += i # 짝이 없으므로 한놈만 더해준다.
return answer # 약수의 합 리턴
answer += i + n//i # i # 약수와 그 짝을 더해준다.
return answer #약수의 합 리턴