2016-10-22 11 views
1

내 코드가 디버깅되었으며 모든 것이 완벽하게 작동합니다. 하지만 내 코드는 어떤 이유로 콘솔에 쓰지 않습니다.가장 큰 소수를 찾는 내 프로그램이 콘솔에 쓰지 않는 이유는 무엇입니까?

long largest = 0; 


     for (long i = 1; i < 600851475144; i++) 
     { 
      long check = 0; 
      for (long j = 1; j < i + 1; j++) 
      { 

       if ((i%j) == 0) 
       { 
        check++; 
       } 
      } 
      if (check == 2) 
      { 
       largest = i; 
      } 
     } 

     Console.WriteLine(largest); 
     Console.ReadKey(); 

질문 : 어떻게 콘솔에 쓰는가 여기

내 코드?

+1

[dotnetfiddle 작동 (https://dotnetfiddle.net/O8Cxs5) (실행 시간을 줄이기 위해 감소 루프 카운터). 어쩌면 당신의 코드는 막대한 시간이 걸릴 것입니까? 100 만 개 정도의 숫자로 상태 메시지를 인쇄하여 실제로 어떤 일을하는지보십시오. – Heinzi

+0

많은 시간을 실행하는 두 개의 중첩 루프가 있으므로. 그래서'WriteLine'에 도달하기까지 오랜 시간을 기다려야합니다. –

+0

나는 그것이 단단한 분 동안 움직이게했다, 아직도 대답을 얻지 않았다. 나는 그것을 줄이려고 노력할 것이다. 그게 작동하는지 확인하십시오. – Mathijs

답변

0

알고리즘이 너무 느려 합리적인 시간에 완료 할 수 없으므로 다른 방법을 찾아야합니다.

첫째, 알고리즘은 순진한 정의 (두 개의 약수) 확인을 중단해야합니다. 숫자의 제곱근까지 모든 제수수를 확인하고 아무 것도 찾지 못한 경우 숫자는 소수입니다. 둘째, 범위에서 가장 큰 소수를 찾고 있다면 범위의 맨 위에서 시작하여 아래로 내려 가서 첫 번째 소수를 찾자 마자 중지하십시오. 셋째, 짝수를 시도 할 필요가 없습니다.

이러한 세 가지 변경 사항을 구현하면 알고리즘이 제대로 실행됩니다.

0

무엇?

끝날 것이지만 모든 반복 작업으로 인해 영원히 지속됩니다.

소수 계산은 매우 집중적 인 계산이며, 특별히 수행 한 방식입니다.

요약 : 분/시간/일/년을 기다려야하므로 요약하지 않습니까? 그 계산.

+1

'1,0846044939535272821717695635416e + 35' iterations 후에 끝납니다 :) –

0

귀하의 알고리즘은 좋지 않습니다. 그것은 많은 반복을해야합니다. 다른 사람들이 이미 언급했듯이, 짝수로 나누기 때문에 2로 증가하고, 3으로 시작하는 감각은 없습니다. 반복 수를 주어진 수의 제곱근으로 줄일 수 있습니다. 내 것도 완벽하지는 않지만 깜박 거립니다. 아이디어는 주어진 숫자를 모든 발견 된 제수로 나누어 반복 횟수를 줄이는 것입니다. 책임의 한계로 시도하십시오!