32 비트 정수 수학에서 덧셈과 곱하기의 기본 연산은 내재적으로 mod 2^32로 계산됩니다. 결과는 최하위 순서가됩니다. 가산 또는 곱셈의 비트.c = 2^N + -1에 대해 신속하게 (~ * b) mod c를 계산하십시오.
다른 모듈러스로 결과를 계산하려면 다른 언어로 여러 개의 BigInt 클래스를 사용할 수 있습니다. 그리고 값이 a, b, c에 대해 < 2^32이면 중간 값을 64 비트 long int로 계산하고 % 연산자를 사용하여 오른쪽으로 줄일 수 있습니다
하지만 특별한 트릭이 있다고 들었습니다 C가 (2^N) -1 또는 (2^N) +1 형태 일 때 a * b mod C를 효율적으로 계산하기 위해서는 64 비트 수학이나 BigInt 라이브러리를 사용하지 않고 매우 효율적입니다. 임의의 모듈러스 평가 및 중간 곱셈을 포함하는 경우 일반적으로 32 비트 int를 오버플로하는 경우를 적절하게 계산합니다.
이러한 특별한 경우에는 빠른 평가 방법이 있다고 들었지만 실제로 방법에 대한 설명을 찾지 못했습니다. "크 누스에 있지 않니?" "위키피디아 어딘가에 있지 않니?" 나는 들었습니다.
2147483647은 2^31 -1과 같은 소수이므로 a * b mod 2147483647의 곱셈을 수행하는 것은 분명히 난수 생성기에서 일반적인 기술입니다.
전문가에게 물어볼 것입니다. 이 똑똑한 특수한 케이스가 무엇인가요? 어떤 논의도 찾을 수없는 mod 방식으로 곱하면 되나요?
그리고 이것의 뒤에있는 수학을 이해하지 못하는 이유는 내가 대학에서 수학 미성년자를 떨어 뜨린 이유 다 ... –
글쎄, 그것은 일종의 9로 나눈 값 (10-1). 방금 숫자를 더합니다. 이제이 경우베이스 10 또는베이스 2 대신에 "기본"입니다. 2^N – FryGuy