큰 숫자가 무엇인지 궁금해하고 있으며이를 처리하는 데 사용되는 일반적인 알고리즘은 무엇입니까? 저는이 용어가 Coders at Work에서 언급 된 것을 들었습니다. 여기서 Coders at Work에서는 인터뷰에서 큰 숫자로 작업 할 라이브러리를 만들도록 요청 받았습니다.큰 숫자, 일반적인 알고리즘?
답변
큰 숫자는 부동 소수점 숫자 (대개 매우 큰 수를 저장할 수 있지만 매우 제한된 정밀도)와는 달리 일반적으로 완전도 정수 또는 소수입니다. 그것들은 주로 암호화에 사용됩니다. 예 : RSA 키 : 1024 또는 2048 비트 (대략 300 또는 600 자릿수)의 정수입니다. 무차별 대입 (brute-force) 계산을 사용하여 암호화를 깨뜨릴 수 없게하려면 길어야합니다. 라이브러리가 제공 할 필요가 무엇
이 번호를 저장하고 그들에 계산 (나머지 예 또한, 곱셈, 정수 나누기)이 미리 정의 된 크기의 숫자와는 달리, 가변 비트 길이와 숫자
을 수행 할 수있는 지원입니다 (예 : 4 비트 정수형).
큰 숫자로 작업하는 빠른 C++ 라이브러리의 예는 숫자 이론 및 암호화 응용 프로그램에 특히 사용되는 NTL입니다. 또 다른 잘 알려진 도구는 유닉스 bc 계산기이며 기본적으로 무제한의 정밀도로 작동합니다. Haskell과 같은 일부 함수형 언어도 이러한 유형의 숫자를 사용합니다.
많은 수의 연산을 처리하는 데 사용되는 접근법의 예는 곱셈에 사용되는 Karatsuba algorithm입니다. NTL의 문서에서 당신이 관심이 있다면 더 많은 것을 찾을 수 있습니다.)
gmp와 같은 bignum 라이브러리가 있습니다 - 일부는 임의의 정밀도를 제공합니다 (메모리가 처리 할 수있는만큼). 일부는 단순히 말도 안되는 한계가 있습니다 - 256 바이트 기본, 256 바이트 가수 부동 소수점 변수.
이 방법은 FPU의 일반적인 소프트웨어 에뮬레이션과 매우 유사합니다. 각 계산에 대해 더 많은 바이트의 데이터를 반복하고, 종이에서 어떻게 계산하는지와 비슷합니다. 256 바이트 정수가 있다면,
가간단한 256 바이트의 정수 또한
unsigned char x[256];
unsigned char y[256];
unsigned char sum[256];
int overflow=0,tmp;
for(unsigned char i=0;i<256;i++)
{
tmp = x[i] + y[i] + ovr;
sum[i] = tmp % 256;
overflow = tmp/256;
}
(완전히 최적화되지 않은 ... 숫자가 길이 등을 유지한다) ... 보통 256 base256 자리 숫자로 취급 될 수있다
- 1. 코드에서 큰 숫자 처리
- 2. 큰 숫자 변환 문제
- 3. 큰-O 알고리즘 분석
- 4. 눈 추적을 수행하는 일반적인 알고리즘
- 5. 그리기 프로그램의 일반적인 줌 알고리즘
- 6. VBA에서 Long보다 큰 숫자 처리
- 7. 수학 오버플로 - 큰 숫자 처리
- 8. PHP와 SQL의 큰 숫자 비교하기
- 9. 큰 카 마이클 숫자 데이터
- 10. 큰 O 표기법 및 알고리즘
- 11. 매우 큰 숫자를 나누는 알고리즘
- 12. 알고리즘 분석 큰 O 표기법
- 13. 숫자 체계 간의 효율적인 변환 알고리즘
- 14. 큰 프로젝트에서 일반적인 소프트웨어를 어떻게 관리합니까?
- 15. C로 큰 숫자 저장 및 작업
- 16. 재귀 및 배열을 사용하여 큰 숫자 곱하기
- 17. 큰 데이터 크기를위한 메모리 효율적인 해시 알고리즘
- 18. 큰 배열 주소 지정을위한 메모리 부족 알고리즘
- 19. SQL Server Analysis Services에서 MODE를 계산하는 것 (가장 일반적인 숫자)
- 20. std :: list 및 std :: map에 대한 일반적인 알고리즘?
- 21. 소수 테스트를위한 가장 빠른 알고리즘
- 22. 유전 알고리즘
- 23. 간단한 알고리즘 : j2me 모바일 장치의 숫자 2를 계산하십시오.
- 24. UI 레이아웃 문제/알고리즘
- 25. 정렬 알고리즘
- 26. JavaScript가 최대 숫자 값보다 큰 값을 비교하지 않음
- 27. 자바에서 두 개의 큰 숫자 (512 비트)를 곱하는 방법
- 28. 큰 숫자 (BigNum)를 처리하기위한 JavaScript의 표준 솔루션은 무엇입니까?
- 29. 가장 작은 것부터 가장 큰 것까지의 C++ 정렬 숫자
- 30. 엄청난 양의 숫자 중에서 가장 큰 숫자를 얻는 방법은 무엇입니까?
관련 : http://stackoverflow.com/questions/1653131/what-programming-language-will-enable-me-to-enter-a-very-long-number-without-conv/ – jldupont