#include <cmath>
int x = 10;
sqrt(x); //x의 제곱근
pow(x, 2); // x의 n제곱
for(int i=2; i<sqrt(x); i++) {
if(x % i == 0) {
sosu = false;
}
}
어떤 수가 소수인지 확인 하는 알고리즘
어떤 x가 소수인지 확인할 때는 2부터 x의 제곱근 까지만 나누어 보는 것으로 확인할 수 있다.
int check[1000000] = { 1, 1, 0 };
for(int i=2; i<= sqrt(n); i++) {
if(check[i] == 0) {
for(int j= i + i; j <= n; j += i) {
check[j] = 1;
}
}
}
n이 주어졌을 때, 1 부터 n 까지의 모든 소수를 구하는 방법
2 부터 n의 제곱근까지 검사하여 소수들의 배수를 지워 나간다.
int check[1000000000] = { 1, 1, 0 };
for(int i=2; i<= sqrt(n); i++) {
if(check[i] == 0) {
for(int j= i + i; j <= n; j += i) {
check[j] = 1;
}
}
}
for(int i=2; i<1000000000; i++) {
if(!check[i]) v.push_back(i);
}
for(int i = 0; i < v.size(); i++) {
if(target % v[i] == 0) break;
}
이 방법은 배열의 최대 크기보다 훨씬 큰 수를 소수 판별할때 사용한다.
먼저 에라토스테네스의 체를 이용하여 check배열을 초기화한다. 최대한 소수를 벡터에 담고, 구하려는 수를 소수들로 나누어주며 나누어진다면 소수가 아니다. 소수가 아닌 수들은 소수를 약수로 갖기 때문이다.
int get_gcd(int a, int b){
if(a<b){
int temp = a;
a = b;
b = temp;
}
while(b!=0){
int n = a%b;
a = b;
b = n;
}
return a;
}
두 수의 최대공약수와 최소공배수를 구하는 알고리즘