Cheap, Fast, Good 에서 영감을 얻어 정확히 두 가지 알고리즘을 구현할 것입니다.
수학
두 개의 0이 아닌 정수 a 와 b가 주어지면 GCF d 는 a 와 b 를 나머지없이 나누는 가장 큰 정수입니다 . 베즈 아웃 계수 는 ax + by = d 와 같은 정수 쌍 (x, y) 입니다. 베즈 아웃 계수는 고유하지 않습니다. 예를 들면 다음과 같습니다.
a = 15, b = 9
우리는
d = 3
x = 2
y = -3
이후 15*2 + 9*(-3) = 30 - 27 = 3
.
GCF와 Bézout 계수 쌍을 계산하는 일반적인 방법은 Euclid 's Algorithm 을 사용하는 것이지만 결코 유일한 방법은 아닙니다.
코드
프로그램은 두 개의 정수를 입력으로 사용해야합니다. 가장 큰 공약수와 한 쌍의 Bézout 계수를 출력 / 반환해야합니다.
입력 예 :
15 9
예제 출력
3 (2, -3)
출력은 어떤 순서와 형식으로도 가능하지만 어느 것이 GCF이고 어떤 계수인지는 분명해야합니다.
언더 핸드
귀하의 프로그램은 저렴하고 빠르며 좋습니다. 불행히도 한 번에 두 개만 될 수 있습니다.
- 저렴 하지 않은 경우 프로그램은 과도한 양의 시스템 리소스를 사용해야합니다.
- 빠르지 않으면 프로그램에 시간이 오래 걸립니다.
- 좋지 않으면 프로그램 출력이 잘못되어야합니다.
이 프로그램은 세 가지를 모두 수행 할 수 있어야합니다. 시간, 컴파일러, 입력이 큰 등을 기반으로 할 수 있습니다. 몇 가지 추가 참고 사항 :
- 귀하의 프로그램은 명백하게 처리되어서는 안되며, 철저한 검사를 통과해야합니다. 세 개의 별도 알고리즘을 구현하면 조금 의심 스러울 것입니다.
- 에서 싼 경우, "시스템 자원의 과도한 양의는"다른 프로그램을 느리게 할 수있는 모든 작업입니다. 메모리, 대역폭 등일 수 있습니다.
- 에서 빠른 경우, "과도한 시간"가에서 실행하는 방법에 비해 의미 저렴 하고 좋은 경우. 프로그램은 여전히 완료되어야합니다. "놀랍게도 실망 스럽지만 프로그램을 중지 할만큼 좌절하지는 않습니다."
- 에서 좋은 경우, 출력은 분명히 잘못 안되며, 피상적 인 검사를 통과해야한다. 그것이 "2 anna half"의 GCF를 주었다면 나는 매우 의심 스러울 것이다.
이것은 인기 콘테스트이므로 대부분의 공감대가 승리합니다!
편집하다
명확히하기 위해, 나는 단지 그들 중 하나를 수행하는 것이 아니라 다른 경우에 "빠르고 저렴" 하고 "싸고 좋은" 그리고 "빠르고 좋은" 프로그램을 찾고 있습니다.