본문 바로가기
codes/반복문

18_listPrimes

by Mia_ 2022. 10. 29.
  //Q. 2 이상의 자연수를 입력받아 2부터 해당 수(num)까지의 소수들을 리턴
  //출력에 할 것
  //break문 사용

  //이중 for문으로 작성해야 함
  //첫번째 반복문 : num보다 작은 수들 순회 -> 얘네가 각각 소수인지 확인해서 문자열로 합쳐준다
  //두번째 반복문 : 소수인지 아닌지 확인하는 작업

  //소수의 조건
  //1.1보다 커야한다
  //2. 2를 제외한 짝수는 소수가 아니다(2는 소수임)
  //3. 3부터 자기 자신까지 반복하면서 나눠서 떨어지는 수(약수)가 하나라도 있으면 소수가 아니다.
  //4. 2를 제외한 모든 짝수는 소수가 아님

  //ex) num = 15,'2-3-5-7-11-13'
function listPrimes(num) {
  let result = '2'; //2를 제외한 모든 짝수는 소수가 아님

  //첫번째 반복문 : num보다 작은 수들 순회 -> 얘네가 각각 소수인지 확인해서 문자열로 합쳐준다
  for(let prime = 3; prime <= num; prime += 2){ //3,5,7,9 순서로 확인
    let isPrime = true;
  
    //두번째 반복문 : 소수인지 아닌지 확인하는 작업
    for(let i = 3; i < prime; i += 2){//3. 홀수만 확인하기
      if(prime % i === 0 ){ //나눠서 떨어지면 소수가 아님
        isPrime = false;
      }      
    }
    if(isPrime === true){ //소수이면
    result = `${result}-${prime}`;
  } 
  }
  return result;
}
//Reference code
function listPrimes(num) {
  let result = '2';
  for (let candi = 3; candi <= num; candi += 2) {
    let isPrime = true;
    let sqrt = parseInt(Math.sqrt(candi));
    for (let divider = 3; divider <= sqrt; divider += 2) {
      if (candi % divider === 0) {
        isPrime = false;
        break;
      }
    }

    if (isPrime) {
      result = `${result}-${candi}`;
    }
  }

  return result;
}

'codes > 반복문' 카테고리의 다른 글

17_isPrime  (0) 2022.10.29
16_getSumOfFactors  (0) 2022.10.29
15_computePower  (0) 2022.10.29
14_characterAndNumber  (0) 2022.10.27
13_replaceAll  (0) 2022.10.27