★ 나눗셈 알고리즘 ? (아주 큰 수일 때)
제가 나누기 알고리즘이 필요해서 문의합니다.
아래와 같이 거대한 두 수의 곱셈은 매우 간단하게 만들 수 있습니다.
그냥 큰 수 x를 (a+b)로, y를 (c+d)로 만든 다음
ac+ad+bc+bd로 계산하면 되거든요.
93216730713477697589973981319816 ×
21679188320429018810359879926078 =
2020863059752202699089389567872442903152891164890278734956561648
그런데, 나누기는 도데체 어떻게 해야 할 지 모르겠습니다.
x/(a+b) 에서 (a+b)가 아주 큰 수 일 때 이렇게 해봤습니다.
x/(a+b) = x/a-((x/a)/(a/b+1)) = x/a-(bx/(a(a+b))) = x(a+b)/(a(a+b))-(bx/(a(a+b))) = (x(a+b)-bx)/(a(a+b))
위와 같이 연구해봤는데, a(a+b) 는 a+b보다 더 자릿수가 큰 수가 되며
x/a-((x/a)/(a/b+1)) 는 나누기를 여러번 반복하여 복잡해진다는
문제점이 있습니다.
위와 같은 문제점이 없는 아주 편리한 알고리즘(문제 해결법)이 있는 지 궁금합니다.
C언어 소스코드는 올려주셔도 되고, 안 그러셔도 되지만,
원리는 꼭 가르쳐 주세요. ^^
x/(a+b) = (x/b) / ( (a+b)/b ) 여기 까지 알아냈습니다. 더 이상 진도가 안 나가네요
'알고리즘, 자료구조 > 알고리즘' 카테고리의 다른 글
array searching (0) | 2012.01.14 |
---|---|
정수의 나눗셈을 곱셈으로 바꾸기 (0) | 2011.12.20 |
공 옮기기 (0) | 2011.12.06 |
다음과 같은 출력을 주는 프로그램을 작성하시오. 최대수는 65536까지 입니다.| (0) | 2011.12.06 |
최단경로 알고리즘 관련 문제 (0) | 2011.12.06 |