2 이상의 자연수를 입력받아 2부터 해당 수까지의 소수(prime number)들을 리턴해야 합니다.
🐻❄️ 입력
number 타입의 정수 (num >= 2)
let output = Primes(2);
console.log(output); // --> '2'
output = Primes(6);
console.log(output); // --> '2-3-5'
output = Primes(18);
console.log(output); // --> '2-3-5-7-11-13-17'
- 반복문의 break 문에 대해서 학습합니다. (javascript loop break)
이중 반복문에 알아야되는 문제이고
잘모르면 어렵기떄문에 알아둬야함.
// 바깥쪽 반복문의 변수를 left로 선언하고, 1에서 3까지 돌린다
for (let left = 1; left <= 3; left++){
// 안쪽 반복문의 변수를 right로 선언하고, 똑같이 1에서 3까지 돌린다
for (let right = 1; right <= 3; right++){
console.log(`${left}-${right}`)
}
}
// 1부터 자기자신까지 나눠보고 나누어 떨어지면 소수가 아니다
function Primes(num) {
let result = '2'
// 2와 num을 포함해서 그사이의 소수를 리턴해주면 된다
// 2는 무조건 들어가므로 결과값을 2부터 시작하면 된다
// 2부터 시작했으니 3부터 비교해주고 num을 포함해야 하니 num까지 비교한다
// 모든 짝수는 소수가 아니므로 i+=2씩 더해서 홀수만 확인한다
for(let i = 3; i <= num; i+=2){
let isprime = true;
// 반복문안에 소수가 맞는지 값을 담아줄 변수를 선언해주고
// 소수가 아니라면 false로 바꿔준다
for(let j = 2; j < i; j++){
// num을 나눌 숫자 j 를 반복한다
// 짝수는 바깥쪽 반복문의 증감문으로 제외시켰고,
// 2는 처음부터 결과값에 들어가있으므로 3부터 시작하고 홀수만 고려한다
if(i%j === 0){
isprime = false;
break;
// i가 j로 나누어 떨어지면 1과 자기자신 이외의 약수가 있으니 소수가 아니다
// 소수가 아닌걸 확인하면 그 뒤까지 돌아볼 필요가 없으니 break문로 끝내주면된다
}
}
// 안의 조건문을 끝내고 나왔고 소수가 아니면 false로 바뀌었다
// isprime true라면 소수이니 result에 넣어준다
if(isprime === true){
result += `-${i}`;
}
}
return result
}
참고블로그 : https://velog.io/@support/%EC%BD%94%ED%94%8C%EB%A6%BF-%EB%B0%98%EB%B3%B5%EB%AC%B8%EC%86%8C%EC%88%98%EC%B0%BE%EA%B8%B0