int g = 1;
for (int i=2; i<=min(a,b); i++) {
if (a % i == 0 && b % i == 0) {
g = i;
}
}
### 유클리드 호제법 (유클리드 알고리즘)
- 최대공약수를 구하는 좀 더 빠른 방법
- a를 b로 나눈 나머지를 r이라고 했을 때
int gcd(int a, int b) {
if (b == 0) {
return a;
} else {
return gcd(b, a%b);
}
}
```
- 비재귀를 이용해 구현한 유클리드 호제법
- 호출하는 것이 하나밖에 없는 재귀함수는 비재귀로 변경 가능하다.
```java
int gcd(int a, int b) {
while ( b != 0 ) {
int r = a%b;
a = b;
b = r;
}
return a;
}
```
```java
public static int gcd(int a, int b){
if(a%b == 0) return b;
return gcd(b, a%b);
}
```
```java
import java.io.BufferedReader;
import java.io.IOException; public static int gcd(int a, int b){
if(a%b == 0) return b;
return gcd(b, a%b);
}
public static void main (String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(br.readLine());
StringBuffer sb = new StringBuffer();
for(int i=0; i<t; i++) {
String[] ns = br.readLine().split(" ");
int n = Integer.parseInt(ns[0]);
long sum = 0;
for(int j=1; j<n; j++) {
for(int k=j+1; k<=n; k++) {
sum += gcd(Integer.parseInt(ns[j]), Integer.parseInt(ns[k]));
}
}
sb.append(sum + "\n");
}
System.out.print(sb.toString());
}
} ```
boj.kr/11005
위의 진법 변환을 이용해서 구현하면 된다.
구현
```java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
public static void changeNS(int num, int b){
Stack st = new Stack();
while(num != 0){
int mod = num % b;
if(mod >= 10) st.push((char)('A' + (mod - 10)));
else st.push(mod);
num = num / b;
}
while(!st.empty()){
System.out.print(st.pop());
}
}
public static void main (String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] ns = br.readLine().split(" ");
int num = Integer.parseInt(ns[0]);
int b = Integer.parseInt(ns[1]);
changeNS(num, b);
}
}
```
B진법 수 N을 10진수로 바꾸려면 B^k을 곱하면서 더해나가면 된다.
3진법 수 102 = (1 3^2) + (0 3^1) + (2 * 3^0) = 11
```java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] bn = br.readLine().split(" ");
String b = bn[0];
Stack st = new Stack();
for(int i=0; i<b.length(); i++){
if(b.charAt(i) >= 48 && b.charAt(i) <= 57)
st.push(((int) b.charAt(i) - 48 ));
else
st.push(((int) b.charAt(i) - 55 ));
}
long sum = 0;
long mul = 1;
while(!st.empty()) {
sum += (int) st.pop() * mul;
mul *= Integer.parseInt(bn[1]);
}
System.out.println(sum);
}
}
A진법을 B진법으로 바꾸면 된다.
구현
```java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static StringBuilder sb = new StringBuilder();
public static void baseToB(int sum, int b){
if(sum >= b){
baseToB(sum / b, b);
sb.append((sum % b) + " ");
}
else{
sb.append(sum + " ");
return;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] ns = br.readLine().split(" ");
int a = Integer.parseInt(ns[0]);
int b = Integer.parseInt(ns[1]);
String m = br.readLine();
ns = br.readLine().split(" ");
int sum = 0;
int mul = 1;
for(int i=ns.length-1; i>=0; i--){
sum += ( Integer.parseInt(ns[i]) * mul );
mul *= a;
}
baseToB(sum, b);
System.out.print(sb.toString());
}
}
```