프로젝트 오일러에서 Problem #5을 해결하려고합니다. 이 코드는 예제에서 작동합니다. 1에서 10까지의 숫자를 확인하면 결과적으로 2520이됩니다. 그러나 1에서 20까지의 숫자를 확인할 때 코드가 실행되는 것을 멈추지 않습니다.내 코드가 실행되지 않는 이유는 무엇입니까?
여기입니다
num = 0
while true
num += 1
check = true
for i in 1..20
break unless check
check = num%i==0
end
break if check
end
File.open("__RESULT__.txt", "w+").write num
마크는 이미 완벽한 해답을주었습니다. 대안 : 모든 숫자는 20으로 나눌 수 있어야하기 때문에,'num + = 20'은 20 배의 속도 향상을 줄 것입니다. 또한 모든 숫자는 1로 나눌 수 있으므로'for i in 2..20'을 사용하십시오. – schnaader
스타일 참고 사항 : 코드는 관용적으로'inf = 1.0/0.0; num = (1..inf) .find {| n | (1.20) .all? {| i | x % i == 0}}'-하지만 계산하기에는 너무 오래 걸린다는 사실은 변하지 않을 것입니다. – sepp2k
방금 제안한 약간 최적화 된 버전을 Ruby에서 확인했습니다. 여기에 약 1 분이 걸리며, 프로젝트 오일러 한계까지는 힘들고 2 초 만에 동일한 C++ 버전보다 훨씬 느립니다. – schnaader