TLE

Leesh Reply 4 years 1 week ago
a와 b가 1000 이상일수도 있다는 말을 듣고 코드를 바꿔 보았습니다. for문이 돌아가는 범위를 최소화 해봤는데(sqrt함수도 처음에만 1회 실행) TLE로 결과가 나옵니다. 어떻게 해야 시간을 더 줄일 수 있을까요.. 조금만 도와주실 수 있으신가요?
Leesh Reply 4 years 1 week ago
그 부분을 미처 생각 못했군요! 감사합니다. 바로 해결되네요 ㅎㅎ
withcs2 Reply 4 years 1 week ago
for(int x=(int)ceil(sqrt(n));x<n;x++){ if(n%x==0)print("%d * %d = %d",x,n/x,n); } for(int x=(int)floor(sqrt(n));x>1;x--){ if(n%x==0)print("%d * %d = %d",n/x,x,n); } 두 반복문의 실행결과는 똑같지만 아래쪽 반복문의 효율이 훨씬 좋습니다. n-sqrt(n) 개 탐색하는 것보다는 sqrt(n)개 이하로 탐색할 수 있도록 해보세요