알고리즘, 자료구조/알고리즘

아주 큰수의 나눗셈 알고리즘

바로이순간 2011. 12. 10. 12:13

★ 나눗셈 알고리즘 ? (아주 큰 수일 때)

제가 나누기 알고리즘이 필요해서 문의합니다.

아래와 같이 거대한 두 수의 곱셈은 매우 간단하게 만들 수 있습니다.


그냥 큰 수 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 ) 여기 까지 알아냈습니다. 더 이상 진도가 안 나가네요