(A + B) % M = ((A%M) + (B%M)) % M
(A * B) % M = ((A%M) * (B%M)) % M
(A - B) % M = ((A%M) - (B%M)) % M <- 음수 주의
```jsconst getGCD = (n1, n2) => {```최소공배수 = GCD (n1/GCD) (n2/GCD)
약수가 1과 자기 자신밖에 없는 수
N이 소수가 되려면 2보다 크거나 같고, N-1보다 작거나 같은 자연수로 나누어 떨어지면 안된다.
const check = (n) => {
if(n < 2) {
return false
}
for (let i = 2; i < n; i ++) {
if(n % i === 0) {
return false
}
}
return true
}
방법 2) N = a * b 일 때 a의 최소값 = 2, b는 N/2보다 클 수 없다.
시간복잡도 O(1/2 N) === O(N)
const check = (n) => {
if(n < 2) {
return false
}
for (let i = 2; i < n/2; i ++) {
if(n % i === 0) {
return false
}
}
return true
}
방법 3) 시간복잡도 O(루트N)
N = a * b
a <= b ? 두 수의 차이가 가장 작은 경우는 루트N
const check= (n) => {
if(n < 2) {
return false
}
for(let i=2; i*i<=n; i++) {
if(n % i === 0){
return false
}
}
return true
}
방법 4) 에라토스테네스의 체
적어두고 지워지지 않은 수 중 가장 작은 수의 배수를 지워감
2의배수,,,3의배수,,,
const arr = Array(n).fill().map((arr, i) => {return true})
for (let i = 0; i*i <= n; i++){
if(arr[i]) {
//배수를 false로 지우기
for(let j = i*i; j <= n; j += i){
arr[j] = false
}
}
}
arr.splice(0, 2, false, false)
const result = arr.filter((value) => {
return value !== false;
})
return result.length;