algorithm/Algorithm-Core

소수판별 알고리즘

아르비스 2017. 4. 1. 12:31

for (int i = 2; i <= 10000; i++) {

     isPrime[i] = true;

     for (int j = 2; j*j <= i; j++) {

          if(i%j==0) {

               isPrime[i] = false;

               break;

          }
     }






for (int i = 1001; i < 10000; i+=2) {

     isPrime[i] = true;

     for (int j = 2; j*j <= i; j++) {

          if(i%j==0) {

               isPrime[i] = false;

               break;

          }
     }
}


// 1은 소수도 합성수도 아니므로 i는 2부터 시작한다.

        // 2의 경우 반복문이 실행되지 않으므로 defalt값으로 실행된다.
       // 끝이 1,3,7,9로  끝난다
       //  i*i <= n 까지만 확인하면됨

        for (int i = 2; i*i <= num; i++) {

            // 1과 num 자신 외에 나누어지는 수가 있는지 검사할 조건문

            if (num % i == 0) {

                // 나누어지는 수가 있을 경우 isPrime의 값을 true로 바꾼다.

                isPrime = true;

                // 한 번이라도 이 조건문이 실행될 경우 num은 소수가 아니므로 반복문을 빠져나온다.

                break;

            }

        }