2013-04-01 3 views
0

나는 JS를 배우고 소수를 출력하는 스크립트를 우연히 만났습니다 < 100. 하지만 어떻게 작동하는지 완전히 이해하고 있는지 확신 할 수 없습니다. 누군가가 설명 할 수 있다면 기쁠 것입니다. :)JS - 소수 스크립트 - 설명

그래서 여기있다 :

for (var counter = 0; counter <= 100; counter++) 
{ 
    for (var i = 2; i <= counter-1; i++) 
     if (counter%i === 0) break; 
    if(i === counter) 
     console.log(counter); 
} 
+0

이것은 도움이 될 수 있습니다. http://www.w3schools.com/js/js_loop_for.asp - 루프 이해. – tymeJV

답변

0

얼마나 많은 JavaScript를 알고 있는지 잘 모르겠습니다. 따라서이 중 일부는 정말 기본 일 수 있습니다.

먼저 소수는 1과 그 자체 만이 중요한 요소라는 것을 기억하십시오.

그래서 첫 번째 줄에는 0에서 100까지 반복되며, counter은이 번호를 유지하는 변수로 사용됩니다. (그 1 counter 제외 통지) 2로부터 counter -1 반복하고이 숫자를 보유 i 사용 for (var i = 2; i <= counter-1; i++)

다음 라인.

i로 나누어 counter 여부 다음 if (counter%i === 0) break; 테스트 (긴 부문과 같은) 나머지를 반환 % 나머지 연산자, 예컨대 11 % 32을 반환합니다. 11을 3으로 나누면 3이 나머지 2가되므로; counter % i0 인 경우 (=====보다 엄격한 같지만 다른 답변이므로 모두 counteri으로 나눌 수 있으므로 소수가 아닙니다. break 문은 가장 안쪽 루프 (즉, i 이상의 루프)를 종료하도록 지시하므로 프로그램이 counter을 증가시키고 계속 증가합니다. 문 i <= counter-1이 false로 평가, 루프 본문의 끝에서, i은 (counter 지금 같음) 증가, 특히,과 -

이전 라인이 i의 가치를 파괴하지 않은 경우

counter은 소수 루프가 끝납니다. 이제 i === counter이 참이므로 console.log(counter)이 콘솔에이 값을 표시합니다.

+0

고마워요! 이것은 제 2 루프의 카운터 1을 더 시각적으로 설명했습니다. –

1

소수는 그 자체로 정의 만이 나눌과 1 외부 루프 0의 숫자를 통해 for var(counter = 0; ...) 루프에 100 내부 루프 for (var i = 2; ...) 다음 시도 2와 카운터 값 사이의 모든 숫자로 외부 숫자를 나눕니다. 만약 그들 중 하나가 나머지없이 숫자를 나눈다면, 루프는 깨진다. 그것은 if (counter%i === 0) break; 라인입니다. 루프가 발생하여 i === counter이 발생하면 주요한 문제입니다. 그렇지 않은 경우 - 정의에 따르면.

+0

고맙습니다. 카운터 1 부분은 어떻게 든 나에게 까다로워 보였다. –

1
/* For every number from 0 to 100, do the following: */ 
for (var counter = 0; counter <= 100; counter++) 
{ 
    /* Loop through values from 2 to 1 before the counter. */ 
    for (var i = 2; i <= counter-1; i++) { 
     /* if the remainder of dividing counter by the current value of `i` is zero, 
     * we know we don't have a prime, so break out of the loop: 
     */ 
     if (counter%i === 0) break; 
    } 
    /* If the loop completed and `i` is equal to the counter, that means counter is not 
    * divisible by anything except for 1 and itself, making it prime 
    */ 
    if(i === counter) 
     console.log(counter); 
}