9,10번이 시간을 엄청 먹어서, 약수를 제곱으로 구한다거나 하면 더 개선할 방법이 없습니다.
딱 특정한 공식을 알아야만 푸는 문제고 딱히 기술적 접근도 아니니 참고해서 푸시길 바랍니다.
def solution(e, starts):
divisor=[0 for i in range(e+1)]
for i in range(2,e+1):
for j in range(1,min(e//i+1,i)):
divisor[i*j]+=2
for i in range(1,int(e**(1/2))+1):
divisor[i**2]+=1
line 5 : divisor[i*j] += 2, line 6 : int( e ** 0.5) +1, line 7 : divisor[i**2] += 1의 의미인것 맞죠?
이거 제대로 카피가 안되네요. def solution(e, starts): divisor=[0 for i in range(e+1)] for i in range(2,e+1): for j in range(1,min(e//i+1,i)): divisor[i*j]+=2 for i in range(1,int(e**(1/2))+1): divisor[i**2]+=1
안녕하세요, 약수 구하는 방법 힌트 주셔서 다행히도 풀렸습니다 :-) 궁금한 점이 있는데, "for i in range(2, e + 1): for j in range(i, e + 1, i): arr[j] += 1" 이렇게 푸는거랑 계산속도에서 왜 많이 차이가 나는지 설명이나 참고자료를 알려주실 수 있을까요?
시간복잡도는 O(n^2) 으로 똑같은데 단순히 계산이 반으로 줄어들어서 아슬아슬하게 들어오네요