📍 약수
자신을 나눌 수 있는 수 이다.
모든 자연수는 1과 자기 자신을 약수로 가진다
function getFactors(num){// 약수모두 찾기
let result = [];
for(let i = 0; i <= num; i++){
if(num % i === 0){//0부터 num 까지 num을 나눌수 있는 수를 찾는다
result.push(i);
}
}
return result;
}
📍 소수
1과 자기 자신만 자신을 나눌 수 있는 수이다.
function isPrime(num){// 소수 인지 아닌지 판별
let result = [];
for(let i = 0; i <= num; i++){
if(num % i === 0){//0부터 num 까지 num을 나눌수 있는 수를 찾는다
result.push(i);
}
}
if(result.length === 2){// 소수는 1과 자기 자신으로만 나눠지니깐
return true;
}
return false;
}
function isPrime(num) {
let sqrt = parseInt(Math.sqrt(num));
if (num === 2) {//2는 무조건 소수
return true;
}
if (num % 2 === 0) {//2로 나뉘면 소수 아님(짝수 빼기)
return false;
}
for (let i = 3; i <= sqrt; i += 2) {//1,2,짝수제외
if (num % i === 0) {
return false;
}
}
return true;
}
📍 피보나치
자신은 자신의 전의수와 자신의 전전의수를 합친수 이다.
0,1,1,2,3,5,8,13,21....
function fibonacci(num){
let newarr =[];
let num1 = 0;
let num2 = 1;
let sum ;
for(let i = 0; i<= num; i++){
if(i === 0){
newarr.push(0);
}else if(i === 1){
newarr.push(1);
}else{
sum = num1 + num2;
newarr.push(sum);
num1 = num2;
num2 = sum;
}
}
return newarr;
}
📍 2의 거듭제곱인지 알아보기
2의 거듭제곱이라는건 2부터 시작하여 앞 수에 2를 곱하여 이어가는 수이다.
function powerOfTwo(num){
if(num === 1){
return true;
}
let n = 2;
while(n < num){
n = n * 2 ;
}
if(n === num){ // 2를 num보다 작을때 까지 곱하다가 num이랑 같아 지면 num은 2의 거듭제곱이다.
return true;
}else{
return false;
}
}
📍 제곱근 구하기 (알고리즘적으로)
a숫자를 두번 곱해서 b가 나오면 a는 b의 제곱근입니다.
ex ) a*a = b
function computeSquareRoot(num) {
const decimalPlaces = 2; // 소수점 몇자리 까지 나타낼것인지
const divider = 10 ** decimalPlaces;
num *= 100 ** decimalPlaces;
num = num / 2;
let i = 1;
while (num - i > 0) {
num -= i;
i++;
}
return i / divider;
}
제곱근을 구할려는 수에 1부터 오름차순으로 빼준다.
그러다 음수가 나와 더이상 뺄 수 없을때 앞에서 나온수와 빼야 하는 수를 비교 해봅니다.
예를 들어 봅시다.
36의 제곱근을 구해 봅시다.
36 / 2 = 18
18 - 1 = 17
17 - 2 = 15
15 - 3 = 12
12 - 4 = 8
8 - 5 = 3 여기서 끝 !! 결과값 3의 두배 = 6
3 - 6 = -3 빼야하는 수 = 6
전의 결과값의 두배 6과 빼야 하는 수 6이 같습니다. 그래서 제곱근 6