어떻게 시간을 단축할 수 있을까요?

mame Reply 4 years 31 weeks ago
최소공배수 찾는 알고리즘을 바꿔 봤는데 time limit exceeded 가 뜹니다... 최소공배수를 더 효율적으로 찾으려면 어떻게 해야 할까요? 그리고 배열 크기를 n1, n2, n3 크기에 맞도록 하기 위해 1001정도로 잡았을 때 segmentation fault가 떴는데 n1, n2, n3 이 1000보다 큰 경우도 있나요?
withcs2 Reply 4 years 31 weeks ago
2000이하인데 문제에 1000 이하라고 적어뒀네요 ㅜㅜ 수정했습니다 감사해요 a와 b의 최소공배수를 구하는 방법은 다양한데 예시를 하나 들어보면 int gcd=1; for(int i=2; i<=a ;i++){ if(a%i==0&&b%i==0){ gcd*=i; a/=i; b/=i; } } int lcm=a*b*gcd; 더 응용해서 빠르게 만들 수도 있겠지만 일단 최대한 간략하게 써보면 이렇게 구할 수 있습니다. 여기서 gcd가 최대공약수, lcm이 최소공배수가 됩니다. 배열을 이용하면 더 빠르게 구할 수도 있지만 5주차 과정에서면 이 정도로만 해도 됩니다. time limit exceed는 최소공배수가 아니라 무한루프 때문인 것 같습니다. 그리고 Sample Input을 넣었을 때 Sample Output 똑같이 나오는지 한 번 확인해보세요!
mame Reply 4 years 31 weeks ago
수정했습니다! 그런데 아직도 시간 문제는 해결이 안 되네요 나머지가 r1, r2, r3인 수를 구하는 반복문이 안 끝나는 걸까요...? ㅠㅠ
withcs2 Reply 4 years 30 weeks ago
int gcd=1; for(int i=2; i<=a ;i++){ while(a%i==0&&b%i==0){ gcd*=i; a/=i; b/=i; } } int lcm=a*b*gcd; if가 아니라 while입니다 죄송합니다 정신이 없었네요