336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

이전에는 유클리드 호제법을 사용하지 않고, 최대공약수를 구해서 풀었는데

이 문제는 소인수분해를 해서 값을 계산하려니 

최대 1e+19 개 까지 소인수분해를 해야하니 답이 없어서.. 유클리드 호제법를 써보려한다. 


내용은 위키피디아 에서 참고하여 학습하였음.

https://ko.wikipedia.org/wiki/유클리드_호제법


2개의 자연수가 최대공약수를 구하는 알고리즘 중 하나이며,

호제법이란 말은 두 수가 서로 상대방 수를 나누어서 결국 원하는 수를 얻는 알고리즘임.


2개의 자연수 A, B에 대해서  (전제조건 A > B의 경우) A를 B로 나눈 나머지를 R 이라 하면,  

A와 B의 최대공약수는 B와 R의 최대 공약수와 같음.


이것을 따라 과정을 반복하면 

B 를 R로 나누어 나머지 R1을 구하고 다시 

R 을 R1 으로 나누어 나머지.. R2를 구하고.. (반복)


해서 나머지가 0이 되었을 때 나누는 수가 A와 B의 최대공약수란 의미이다. 


예제)

1071 과 1029의 최대 공약수를 구하면

<과정 1> 

1071 > 1029 

A = B*i + R

1071 = 1029 * 1 + 42

이때 B는 1029, R은 42

B = R*i + R1

1029 = 42*24 + 21

R = R1*i + R2

42 = 21*2 + 0

이므로 가장 마지막에 나온 Rn(나머지) 가 if(R==0)이 되면 이때 Rn-1이 최대공약수가 된다는 의미이다.


------------------------------------------------------------------------------------------------------

이 1850 문제의 예제로 


A = 111 

B = 1111 인 경우 


B > A 이므로 


B = A*i + R1

1111 = 111*10 + 1

A = R1*i + R2

111 = 1*111 + 0 

이므로 R2가 0 이 되므로 R1인 1이 최대공약수가 된다. (A와 B의 최대공약수 1)

------------------------------------------------------------------------------------------------------

A 111 

B 111111 인 경우


B > A 이므로 

B = A*i + R1

111111 = 111*1001 + 0

이때 R1 이 0 이므로 A가 A와 B의 최대 공약수가 된다. (A와 B의 최대공약수 111)

------------------------------------------------------------------------------------------------------


사실 2달전에 C++11로 작성했는데 틀렸다. 


지금에서 다시 풀어보는데... 

문제를 잘못 이해했던 부분도 있었다.


잘못 1 ) 입력의 개수, 1e+19 자리라는 의미 1이 1e+19 개만큼 ...


잘못 2 ) 정답은 천만 ''자리''를 넘지않는다.


잘못 3 ) 입력으로 4인 경우 1111, 5인경우 11111..... 

1e+19개 인경우 ......... 저걸..... 111111111111111111.........11111111111111111111...............ㅁㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ


어차피 111........1.....1.1111 인수는 결국엔 최대공약수가 11111....11 로 구성되어 있기 때문에 입력으로.........

들어오는 수의 최대공약수 만큼 1을 출력하면되는 문제였다.......



'PSNote > Problem Solving' 카테고리의 다른 글

[BOJ=10844]쉬운계단수  (0) 2017.07.17
[BOJ-2108]통계학  (0) 2017.07.17
[BOJ-14502]연구소  (0) 2017.07.17
[BOJ-2346]풍선 터뜨리기  (0) 2017.07.17
[BOJ-11441]합구하기  (0) 2017.07.17

+ Recent posts