์ฐธ๊ณ :
public class Main {
public static boolean isPrime(int num) {
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) return false;
}
return true;
}
public static void main(String[] args) {
System.out.println(isPrime(80));
System.out.println(isPrime(79));
}
}
์ฐ๋ณ์ ๋ฃจํธ๋ฅผ ์์์ฃผ๋ ค๋ฉด โ i <= Math.sqrt(num);
for(int i = 2; i <= sqrt(N); i++) { // ๋๋ i * i <= N
while(N % i == 0) {
println(i);
N /= i; // *
}
}
if(N != 1) { // ์ด๊ฑธ ์จ์ฃผ๋ ์ด์ โ
println(N);
}
N /= i
๋ก ๋๋๊ณ , ๋จ์ ์ต์ข
N
์ด ๋ ๊ฐ์ง ์ผ์ด์ค๋ก ๋๋๋ค๋ ๊ฒ์ด๋ค.N โ 1
์ด๋ผ๋ฉด,N
์ ์์์ด์ ์ธ์์ธ ๊ฒ์ด ์๋ช
ํ๊ธฐ ๋๋ฌธ์ ํ ๋ฒ ๋ ์ถ๋ ฅํด์ฃผ๋ ์กฐ๊ฑด๋ฌธ์ด ํ์ํ๋ค!!์ฐธ๊ณ :
ํธ์ ๋ฒ: ๋ ์๊ฐ ์๋ก ์๋๋ฐฉ ์๋ฅผ ๋๋์ด์ ๊ฒฐ๊ตญ ์ํ๋ ์๋ฅผ ์ป๋ ์๊ณ ๋ฆฌ์ฆ์ ์๋ฏธ.
๋ ๊ฐ์ ์ A, B๊ฐ ์กด์ฌํ๊ณ , A๋ฅผ B๋ก ๋๋ ๋๋จธ์ง๋ฅผ C๋ผ๊ณ ํ๊ฒ ์ต๋๋ค. (A > B)
์ด ๋, A์ B์ ์ต๋๊ณต์ฝ์๋ B์ C์ ์ต๋๊ณต์ฝ์์ ๊ฐ์ต๋๋ค. ex. A = 21, B = 14, C = 7 โ ์ต๋๊ณต์ฝ์ 7
์ด๋ฌํ ์ฑ์ง์ ์ด์ฉํด์ ๊ณ์์ ์ผ๋ก ๋๋์ ์ ์งํํด์ C๊ฐ 0์ด ๋์์ ๋, ์ฆ ๋๋จธ์ง๊ฐ 0์ด ๋์์ ๋์ ๋๋๋ ์๊ฐ ์ต๋๊ณต์ฝ์๊ฐ ๋ฉ๋๋ค.
b
๊ฐ 0
์ด๋ผ๋ฉด a
๊ฐ ์ต๋๊ณต์ฝ์๊ฐ ๋๋ค.b
์ a % b
์ ์ต๋๊ณต์ฝ์๋ฅผ ๊ตฌํ๊ธฐ๋ฅผ ์ฌ๊ท์ ์ผ๋ก ๋ฐ๋ณตํ์ฌ ์ต๋๊ณต์ฝ์๋ฅผ ๊ตฌํ ์ ์๋ค.public static int gcd(int a, int b) {
if (b == 0) return a;
return gcd(b, a % b); //์ด ๋ถ๋ถ์ด ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ์ ํต์ฌ
}
private int gcd(int max, int min) { // max=21, min=14
while (max % min != 0) {
int temp = max; // max=21, min=14, temp=21
max = min; // max=14, min=14, temp=21
// ์ด ๋ถ๋ถ์ด ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ์ ํต์ฌ
min = temp % min; // min=๋ ์๋ฅผ ๋๋ ๋๋จธ์ง๊ฐ // max=14, min=7, temp=21
}
return min;
}
๐ก ํด๋น ๋ถ๋ถ์์๋ int[] arr
ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ๋ฐฐ์ด์ ์ํํ๋ฉด์ ๋ฐฐ์ด์ ์๋ ๋ชจ๋ ์์ โ์ต๋๊ณต์ฝ์โ๋ฅผ ๊ตฌํฉ๋๋ค.
result
๋ณ์๋ฅผ ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ๊ฐ์ผ๋ก ์ด๊ธฐํํฉ๋๋ค
๋ฐ๋ณต๋ฌธ์ ํตํด ๋ฐฐ์ด์ ๋๋จธ์ง ๊ฐ๋ค๊ณผ ์ต๋๊ณต์ฝ์๋ฅผ ๊ตฌํ์ฌ result
๋ณ์์ ์ ์ฅํฉ๋๋ค.
์ต์ข
์ ์ผ๋ก result
๋ณ์์ ์ ์ฅ๋ ๊ฐ์ด ๋ฐฐ์ด์ ์๋ ๋ชจ๋ ์์ ์ต๋๊ณต์ฝ์๊ฐ ๋ฉ๋๋ค.
// ๋ ์์ ์ต๋๊ณต์ฝ์๋ฅผ ์ผ๋จ ๊ตฌํ๋ ๋ฉ์๋ ์ ์
public static int gcd(int a, int b) {
if (b == 0) return a;
return gcd(b, a % b);
}
public static int gcd(int[] arr) { //int[] arr๊ฐ N์
int result = arr[0];
for (int i = 1; i < arr.length; i++) {
result = gcd(result, arr[i]);
}
return result;
}
public static int lcm(int a, int b) { //a=100, b=25, gcd(a,b)=25
return a * b / gcd(a, b); //2500/25=100
}
๐ก ํด๋น ๋ถ๋ถ์์๋ int[] arr
ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ๋ฐฐ์ด์ ์ํํ๋ฉด์ ๋ฐฐ์ด์ ์๋ ๋ชจ๋ ์์ โ์ต์๊ณต๋ฐฐ์โ๋ฅผ ๊ตฌํฉ๋๋ค.
result
๋ณ์๋ฅผ ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ๊ฐ์ผ๋ก ์ด๊ธฐํํฉ๋๋ค
๋ฐ๋ณต๋ฌธ์ ํตํด ๋ฐฐ์ด์ ๋๋จธ์ง ๊ฐ๋ค๊ณผ ์ต์๊ณต๋ฐฐ์๋ฅผ ๊ตฌํ์ฌ result
๋ณ์์ ์ ์ฅํฉ๋๋ค.
์ต์ข
์ ์ผ๋ก result
๋ณ์์ ์ ์ฅ๋ ๊ฐ์ด ๋ฐฐ์ด์ ์๋ ๋ชจ๋ ์์ ์ต์๊ณต๋ฐฐ์๊ฐ ๋ฉ๋๋ค.
public static int lcm(int a, int b) {
return (a * b) / gcd(a, b);
}
public static int lcm(int[] arr) {
int result = arr[0];
for (int i = 1; i < arr.length; i++) {
result = lcm(result, arr[i]);
}
return result;
}