코딩테스트/백준

JAVA 백준 21412번 Дробь

광고(주) 2022. 6. 18. 15:54
반응형

문제

Коля учится в третьем классе, сейчас они проходят простые дроби с натуральными числителем и знаменателем. Вчера на уроке Коля узнал, что дробь называется правильной, если ее числитель меньше знаменателя, и несократимой, если нет равной ей дроби с меньшими натуральными числителем и знаменателем.
Коля очень любит математику, поэтому дома он долго экспериментировал, придумывая и решая разные задачки с правильными несократимыми дробями. Одну из этих задач Коля предлагает решить вам с помощью компьютера.
Найдите наибольшую правильную несократимую дробь, у которой сумма числителя и знаменателя равна n.

입력

Во входном файле записано одно целое число n (3<= n<= 1000).

10
23

출력

Выведите в выходной файл числитель и знаменатель искомой дроби.

3 7
11 12

알고리즘 분류

브루트포스 알고리즘(bruteforcing), 유클리드 호제법(euclidean), 수학(math), 정수론(number_theory)

힌트

분자가 분모보다 작은수를 분수라 한다
정수 n이 주어였을때 n (3<= n<= 1000)
가장 큰 분수를 구한다

소스코드

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        for (int i = n / 2 + 1; i < n; i++) {
            int gcd = GCD(i, n - i);
            if (gcd == 1) {
                System.out.println(n - i + " " + i);
                break;
            }
        }
    }

    // greatest common divisor
    static int GCD(int a, int b) {
        if (b == 0) return a;
        return GCD(b, a % b);
    }

    // least common multiple (a*b/GCD(a,b)) oerverflow
    static int LCM(int a, int b) {
        return (a * b) / GCD(a, b);
    }
}
반응형