fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 9765 (C++) 여섯 방정식
최초 업로드: 2025-10-08 10:52:52
최근 수정 시간: 2025-10-08 10:52:52
게시자: rlatjwls3333
카테고리: 백준
조회수: 9
# [Silver I] 여섯 방정식 [문제 링크](https://www.acmicpc.net/problem/9765) ## 문제 설명 <p>여섯 개의 간단한 방정식이 주어진다. 이때, x<sub>1</sub>, x<sub>2</sub>, x<sub>3</sub>, x<sub>5</sub>, x<sub>6</sub>, x<sub>7</sub>를 찾는 프로그램을 작성하시오. x<sub>1</sub>, x<sub>2</sub>, x<sub>3</sub>, x<sub>5</sub>, x<sub>6</sub>, x<sub>7</sub>은 2보다 크거나 같고, 20,000,000보다 작거나 같은 소수이다. 여섯 방정식은 아래와 같다.</p> <ul> <li>c<sub>1</sub> = x<sub>1</sub>x<sub>2</sub></li> <li>x<sub>4</sub> = c<sub>4</sub>x<sub>1</sub></li> <li>c<sub>3</sub> = x<sub>6</sub>x<sub>7</sub></li> <li>x<sub>8</sub> = x<sub>7</sub>c<sub>2</sub></li> <li>c<sub>5</sub> = x<sub>2</sub>x<sub>3</sub></li> <li>c<sub>6</sub> = x<sub>6</sub>x<sub>5</sub></li> </ul> <p>c<sub>1</sub>, c<sub>2</sub>, c<sub>3</sub>, c<sub>4</sub>, c<sub>5</sub>, c<sub>6</sub>은 양의 정수로 (20,000,000)<sup>2</sup>을 넘지 않는다. c<sub>1</sub>, c<sub>2</sub>, c<sub>3</sub>, c<sub>4</sub>, c<sub>5</sub>, c<sub>6</sub>이 주어졌을 때, x<sub>1</sub>, x<sub>2</sub>, x<sub>3</sub>, x<sub>5</sub>, x<sub>6</sub>, x<sub>7</sub>을 푸는 프로그램을 작성하시오. 항상 풀 수 있는 방정식만 입력으로 주어진다. </p> ## 입력 <p>첫째 줄에 c<sub>1</sub>, c<sub>2</sub>, c<sub>3</sub>, c<sub>4</sub>, c<sub>5</sub>, c<sub>6</sub>이 주어진다. (c<sub>1</sub> ≠ c<sub>5</sub>, c<sub>3</sub> ≠ c6)</p> ## 출력 <p>x<sub>1</sub>, x<sub>2</sub>, x<sub>3</sub>, x<sub>5</sub>, x<sub>6</sub>, x<sub>7</sub> 를 공백으로 구분해 출력한다. 가능한 답이 여러 가지인 경우, 아무거나 출력한다.</p> ## 풀이 유클리드 호제법으로 c1과 c5, c3와 c6 사이의 최대공약수를 찾아 x2, x6를 찾아 놓고 방정식의 해를 출력하면 됩니다. 브루트포스로 2000만까지 소수판정해서 x2와 x6를 찾는 방법도 300ms 정도에 풀립니다. ``` c++ #include<bits/stdc++.h> using namespace std; typedef long long ll; int main() { ios::sync_with_stdio(0); cin.tie(0); ll c1, c2, c3, c4, c5, c6; cin >> c1 >> c2 >> c3 >> c4 >> c5 >> c6; ll gcd1 = gcd(c1, c5); ll gcd2 = gcd(c3, c6); cout << c1/gcd1 << ' ' << gcd1 << ' ' << c5/gcd1 << ' ' << c6/gcd2 << ' ' << gcd2 << ' ' << c3/gcd2; } ```