2013-03-18 3 views
-2

이 코드를 풀려고했지만 실제로는 할 수 없습니다 .. somembody가 도움이된다면이 코드는 효과가 있지만 결과는 없습니다! :이 코드는 (덜)에 대한 n^3 반복에 반복되는합계와 3 개의 루프가있는 소수

public class Primenumber { 

    public static void main(String[] args) { 
     int n = 10000; 
     long sum = 0; 
     loop: 
     for (int i = 2; i <= n; i++) { 
      for (int j = 2; j < n; j++) { 
       for (int k = j; k < n; k++) { 
        if (i == j * k) { 
         continue loop; 
        } 
       } 
      } 
      sum += i; 
     } 
     System.out.println("该整数之内的所有素数之和是:" + sum); 
    } 
} 
+2

"이 코드를 해결 하시겠습니까?" 코드가 정확하다고 보입니다. 코드가 무엇인지 이해하고 싶습니까? –

+2

귀하의 질문은 무엇입니까? –

+0

프로그램을 컴파일 한 후에 결과가 없으면 결과가 있어야합니다. – Johan

답변

0

. 너가 큰을 통과하면 끝나지 않는 것은 당연하지 않다 n.

그런 다음 결과 코드, 당신이 단지를 잘 작동하는 것 같다 한마디로

该整数之内的所有素数之和是:76127 

입니다

n = 1000; 

n = 10000; 

을 변경하여 "작동 할"수

n에 대한보다 효율적인 알고리즘을 찾아야합니다. 고급 체 알고리즘의 세부 사항에 가지 않고

+0

결과는 1000이 아닌 10000 이하의 모든 소수의 합계이어야합니다. 내 실수는 무엇입니까? – Johan

+0

그것은 큰 값의 n에 대해서는 너무 느립니다. –

+0

감사합니다. 정상적으로 작동합니다. – Johan

2

:

에만 낮은 약수를 찾을 필요하거나 sqrt(i)보다 동일
  • . (정수 j>sqrt(i)i를 분할하는 경우도 i 분할 또 다른 정수 k<sqrt(i) 존재한다.)
  • 당신은 심지어 정수 i를 분할하면 다른 심지어 약수가 2. (다음 2i를 분할한다는 (즉, 확인되지 않음) 삭제할 수 있습니다, 이미 이전에 테스트 했음)
  • 소수가 아닌 것으로 알고있는 약수 (예 : i의 소수 인 이전 값)를 버릴 수 있습니다. 정수 ji으로 나뉘면 j이 소수이거나 j=p*m (p이 소수이고 pi 인 경우)입니다.
  • 내부 루프는 불필요합니다 (몫의 무차별 대항 검색으로 나누기). 대신, i%j==0 (즉, i의 나머지를 j으로 나눈 나머지가 0 인 경우)을 확인하십시오.
관련 문제