TLE

yyggh337 Reply 4 years 28 weeks ago
다른 분이 discuss에 올려주신 거처럼 2, 3 제외한 소수는 6*n+1 또는 6*n-1인 거 이용해서 시간을 줄여보려고 했는데 여전히 TLE가 나옵니다.
withcs2 Reply 4 years 28 weeks ago
지금 코드에서 시간 줄일 수 있는 방법은 꽤 많습니다. 1. 2,3 제외한 소수는 6으로 나눈 나머지가 1 또는 5다. -> k와 k+2가 둘다 소수라면 k는 3이거나 k를 6으로 나눈 나머지가 5다. -> 반복문에 k++ 말고 k=k+6을 넣으면 시간이 1/6배로 줄어든다. 2. ★★★★★ (사실 다 필요없고 이게 핵심입니다) 2이상 합성수(소수가 아닌 수) k는 반드시 2이상 루트k 이하의 약수를 가진다. -> 2부터 루트k까지만 확인해보면 된다. 2-1. 홀수인 합성수는 k는 반드시 2이상 루트k 이하의 홀수인 약수를 가진다. -> 2부터 루트k까지 i=i+2로 확인하면 시간이 반으로 줄어든다. * 함수를 사용할 수 있으시군요! end랑 break로 확인하는 대신 반복문 안에서 바로 return 1, return 0 하면 보다 코드를 깔끔하게 만들 수 있어요