$ irb
irb(main):001:0> 3298433280483209483208402384092834028340823094820384023840238402384098230432 % 3212038901283080182309128328210328123321231231
=> 1128685941812964633381803964244290876440336237
irb(main):002:0>
$ python
Python 2.3.4 (#2, May 29 2004, 03:31:27)
[GCC 3.3.3 (Debian 20040417)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 9312823038201983128301823098120381209830128309218230109321803909123830981092380183013238210398 % 2310821930380912830981209380183091283012331231
532205282735077454127723470974423873448117028L
>>>
$ lisp
CMU Common Lisp CVS release-18e-branch + minimal debian patches, running on hjnotebook
With core: /usr/lib/cmucl/lisp.core
Dumped on: Fri, 2004-06-04 09:10:33+09:00 on hjnotebook
For support see http://www.cons.org/cmucl/support.html Send bug reports to the debian BTS.
or to pvaneynd@debian.org
type (help) for help, (quit) to exit, and (demo) to see the demos
Loaded subsystems:
Python 1.1, target Intel x86
CLOS 18e (based on PCL September 16 92 PCL (f))
* (mod 348093284023840283402332423482309840238409283094820384023840233294802384023890433024 8234094238403284028340283402390482304832)
1854366119782816955825952402026414641344
* (quit)
정수를 배열로 저장한다음에,
x / y = z + a
=> x = z * y + a 에서,
x 와 z * y 의 자리수를 먼저 같게 한후,
y 를 바꾸면서 값을 구함.
예1)
9876543210 / 654321 = z + a
=> 9876543210 = z * 654321 + a
=> 9876543210 은 10자리
654321 는 6자리
그러므로, z 는 10000 이 초기 값,
=> 9876543210 > (654321 * 10000 = 6543210000) 이므로,
9876543210 < (654321 * 20000 = 13086420000) 이므로,
z 의 첫번째 수는 1 임을 알수 있고,
9876543210 > (654321 * 11000 = 7197531000)
...
9876543210 > (654321 * 15000 = 9814815000)
9876543210 < (654321 * 16000 = 10469136000) 이므로,
z 의 두번째 수는 5임을 알수 있고,
9876543210 < (654321 * 15100 = 9880247100) 이므로,
z 의 세번째 수는 0 임을 알수 있고,
9876543210 > (654321 * 15010 = 9821358210)
...
...
예2)
9876543210 - (654321*10000) = 3333333210
3333333210 - (654321*10000) = 음수
z 의 첫번째 숫자는 1
3333333210 - (654321*1000) = 2679012210
2679012210 - (654321*1000) = 2024691210
2024691210 - (654321*1000) = 1370370210
1370370210 - (654321*1000) = 716049210
716049210 - (654321*1000) = 61728210
61728210 - (654321*1000) = 음수
z 의 두번째 숫자는 5
....
한 번만 확인해보시려는거면 bc를 쓰시거나, 혹은 프로그램 내에서의 문제
한 번만 확인해보시려는거면 bc를 쓰시거나, 혹은 프로그램 내에서의 문제라면 GNU MP 라이브러리의 정수 나눗셈 함수들을 쓸 수 있습니다.
--
자본주의, 자유민주주의 사회에서는 결국 자유마저 돈으로 사야하나보다.
사줄테니 제발 팔기나 해다오. 아직 내가 "사겠다"고 말하는 동안에 말이다!
openssl의 BIG_NUM 관련 라이브러리를 사용해 보세요
openssl의 BIG_NUM 관련 라이브러리를 사용해 보세요
큰 정수를 다루는 여러 함수와 구조체를 제공합니다.
Ruby, Python, CMU Lisp 에서 나머지 구하는 것입니다.
Ruby, Python, CMU Lisp 에서 나머지 구하는 것입니다.
http://hj-lee.github.io/
가장 기본적인 bc 를 잊었군요.c++ 에서 GNU MP 사용 예
가장 기본적인 bc 를 잊었군요.
c++ 에서 GNU MP 사용 예 -
결과는
java 에는 java.math.BigInteger
http://hj-lee.github.io/
잠깜 생각해보았는데, 정수를 배열로 저장한다음에, x / y
잠깜 생각해보았는데,
정수를 배열로 저장한다음에,
x / y = z + a
=> x = z * y + a 에서,
x 와 z * y 의 자리수를 먼저 같게 한후,
y 를 바꾸면서 값을 구함.
예1)
9876543210 / 654321 = z + a
=> 9876543210 = z * 654321 + a
=> 9876543210 은 10자리
654321 는 6자리
그러므로, z 는 10000 이 초기 값,
=> 9876543210 > (654321 * 10000 = 6543210000) 이므로,
9876543210 < (654321 * 20000 = 13086420000) 이므로,
z 의 첫번째 수는 1 임을 알수 있고,
9876543210 > (654321 * 11000 = 7197531000)
...
9876543210 > (654321 * 15000 = 9814815000)
9876543210 < (654321 * 16000 = 10469136000) 이므로,
z 의 두번째 수는 5임을 알수 있고,
9876543210 < (654321 * 15100 = 9880247100) 이므로,
z 의 세번째 수는 0 임을 알수 있고,
9876543210 > (654321 * 15010 = 9821358210)
...
...
예2)
9876543210 - (654321*10000) = 3333333210
3333333210 - (654321*10000) = 음수
z 의 첫번째 숫자는 1
3333333210 - (654321*1000) = 2679012210
2679012210 - (654321*1000) = 2024691210
2024691210 - (654321*1000) = 1370370210
1370370210 - (654321*1000) = 716049210
716049210 - (654321*1000) = 61728210
61728210 - (654321*1000) = 음수
z 의 두번째 숫자는 5
....
으로 계속해서 구하면 되지 않을까요?? -.-;;
vnl_bignum 이라는 것이 있습니다.
vnl_bignum 이라는 것이 있습니다.
C++ 클래스이고, 큰 수의 덧셈/뺄셈/곱셈/나눗셈/나머지 연산을 할 수 있습니다.
다만, 저는 Visual C++ 6 에서 돌려 봤고, gcc 에서는 잘 돌아가는지는 모르겠네요. :?
첨부된 소스 파일의 확장자 cxx 는 cpp 로 바꿔서 사용하면 됩니다.
----
블로그 / 위키 / 리눅스 스크린샷 갤러리
댓글 달기