백준-17427

0

  • 처음에는 무식하게 모든 수의 약수를 구하여 더하였다.
  • 제한 시간이 0.5초 이기에 당연히 시간초과가 났다.

<시간초과가 난 코드>

n=int(input())
answer=0
result=[]
def get_num(num):
    global answer
    if num==1:
        answer+=num
        return
    for i in range(1, int(num**0.5)+1):
        if num%i==0:
            answer+=i
            temp=num//i
            if i!=(temp):
                answer+=temp

for n in range(1, n+1):
    get_num(n)

print(answer)
  • 입력된 n에 n보다 작은 수 i를 나눈 몫이 n보다 작은 수들이 가지고 있는 i의 개수 였다.
  • 여기서 i를 곱하여 더해준다면 이는 합이 되는 것이다.

<성공한 코드>

n=int(input())
ans=0

for i in range(1, n+1):
    ans+=((n//i)*i)
        
print(ans)

0개의 댓글