C ++에서 A, B, C <= 10 ^ 18에 대해 (A * B) % C를 어떻게 계산할 수 있습니까?

사용자 3158621

예 : A = 10 ^ 17, B = 10 ^ 17, C = 10 ^ 18.
제품 A * B가 long long int의 한계를 초과합니다.
또한 ((A % C) * (B % C)) % C를 쓰는 것은 도움이되지 않습니다.

64 비트 정수 연산을 유지하고 싶다고 가정하면 이진 긴 나눗셈을 사용할 수 있습니다.이 방법은 여러 덧셈과 두 연산을 곱하는 것으로 요약됩니다. 즉, 이러한 연산자의 오버플로 방지 버전도 필요하지만 비교적 간단합니다.

다음은 A와 B가 이미 양수이고 M보다 작다고 가정하는 Java 코드입니다. 그렇지 않은 경우 미리 쉽게 만들 수 있습니다.

// assumes a and b are already less than m
public static long addMod(long a, long b, long m) {
    if (a + b < 0)
        return (a - m) + b;  // avoid overflow
    else if (a + b >= m)
        return a + b - m;
    else
        return a + b;
}

// assumes a and b are already less than m
public static long multiplyMod(long a, long b, long m) {
    if (b == 0 || a <= Long.MAX_VALUE / b)
        return a * b % m;   // a*b > c if and only if a > c/b
    // a * b would overflow; binary long division:
    long result = 0;
    if (a > b) {
        long c = b;
        b = a;
        a = c;
    }
    while (a > 0) {
        if ((a & 1) != 0) {
            result = addMod(result, b, m);
        }
        a >>= 1;
        // compute b << 1 % m without overflow
        b -= m - b; // equivalent to b = 2 * b - m
        if (b < 0)
            b += m;
    }
    return result;
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

이 계산을 C #에서 어떻게 할 수 있습니까?

분류에서Dev

mysql에서 A와 B의 최소 수를 어떻게 계산할 수 있습니까?

분류에서Dev

waypoints Google map API에서 A, B, C ..를 1, 2,3 ..로 어떻게 바꿀 수 있습니까?

분류에서Dev

C에서 정수 지수 모듈로 상수를 어떻게 계산할 수 있습니까?

분류에서Dev

C ++ 11에서 SICP 2.4를 어떻게 해결할 수 있습니까?

분류에서Dev

두 인수의 함수에 대해 C ++에서 [] 연산자를 어떻게 오버로드 할 수 있습니까?

분류에서Dev

임베디드 C에서 다음 for 루프에 의해 주어진 지연을 어떻게 계산할 수 있습니까?

분류에서Dev

임베디드 C에서 다음 for 루프에 의해 주어진 지연을 어떻게 계산할 수 있습니까?

분류에서Dev

(a * b) % c 계산시 a, b, c가 c에서 (x) e + 18 정도일 때

분류에서Dev

모델 A가 다른 모델 C를 통해 B의 인스턴스를 여러 개 가지고 있다면, A의 특정 인스턴스에서 B의 인스턴스를 파괴하는 경로를 어떻게 만들 수 있습니까?

분류에서Dev

파일 라인 (정수)을 읽고 라인 A에서 라인 B까지의 합계를 어떻게 합산 할 수 있습니까?

분류에서Dev

C #에서 두 날짜 사이의 시간대에서 acutal elapsed time을 어떻게 계산할 수 있습니까?

분류에서Dev

a, b가 double 유형 인 경우 matlab에서 norm (a, b)를 어떻게 사용할 수 있습니까?

분류에서Dev

B2B 및 B2C Azure Active Directory 인스턴스가 많이 있습니다. KeyVault에 어떻게 할당합니까?

분류에서Dev

C #에서 어떻게 할 수 있습니까?

분류에서Dev

C #에서 상수 해시 세트를 어떻게 만들 수 있습니까?

분류에서Dev

C #에서 MEF를 사용할 때 Export 특성에 대한 래퍼를 어떻게 만들 수 있습니까?

분류에서Dev

Azure B2C에 연결할 때 oauth2_proxy를 어떻게 디버깅 할 수 있나요?

분류에서Dev

C ++에서 분할 오류를 어떻게 수정할 수 있습니까?

분류에서Dev

(A == B == C) 비교는 JavaScript에서 어떻게 작동합니까?

분류에서Dev

a = a ^ b 문은 C ++에서 어떻게 작동합니까?

분류에서Dev

C에서 구조체에 대한 포인터를 어떻게 할당 할 수 있습니까?

분류에서Dev

칼리 시스템에서 C 언어로이 오류를 어떻게 해결할 수 있습니까?

분류에서Dev

C #에서 CRC32를 부호있는 정수로 계산하려면 어떻게해야합니까?

분류에서Dev

C ++에서 난수를 어떻게 생성 할 수 있습니까?

분류에서Dev

Javascript에서 C ++ 함수를 어떻게 호출 할 수 있습니까?

분류에서Dev

JS에서 C # 함수를 어떻게 호출 할 수 있습니까?

분류에서Dev

Jquery Selector에서 C # ViewBag 변수를 어떻게 사용할 수 있습니까?

분류에서Dev

C에서 gets () 함수의 문제를 어떻게 해결할 수 있습니까?

Related 관련 기사

  1. 1

    이 계산을 C #에서 어떻게 할 수 있습니까?

  2. 2

    mysql에서 A와 B의 최소 수를 어떻게 계산할 수 있습니까?

  3. 3

    waypoints Google map API에서 A, B, C ..를 1, 2,3 ..로 어떻게 바꿀 수 있습니까?

  4. 4

    C에서 정수 지수 모듈로 상수를 어떻게 계산할 수 있습니까?

  5. 5

    C ++ 11에서 SICP 2.4를 어떻게 해결할 수 있습니까?

  6. 6

    두 인수의 함수에 대해 C ++에서 [] 연산자를 어떻게 오버로드 할 수 있습니까?

  7. 7

    임베디드 C에서 다음 for 루프에 의해 주어진 지연을 어떻게 계산할 수 있습니까?

  8. 8

    임베디드 C에서 다음 for 루프에 의해 주어진 지연을 어떻게 계산할 수 있습니까?

  9. 9

    (a * b) % c 계산시 a, b, c가 c에서 (x) e + 18 정도일 때

  10. 10

    모델 A가 다른 모델 C를 통해 B의 인스턴스를 여러 개 가지고 있다면, A의 특정 인스턴스에서 B의 인스턴스를 파괴하는 경로를 어떻게 만들 수 있습니까?

  11. 11

    파일 라인 (정수)을 읽고 라인 A에서 라인 B까지의 합계를 어떻게 합산 할 수 있습니까?

  12. 12

    C #에서 두 날짜 사이의 시간대에서 acutal elapsed time을 어떻게 계산할 수 있습니까?

  13. 13

    a, b가 double 유형 인 경우 matlab에서 norm (a, b)를 어떻게 사용할 수 있습니까?

  14. 14

    B2B 및 B2C Azure Active Directory 인스턴스가 많이 있습니다. KeyVault에 어떻게 할당합니까?

  15. 15

    C #에서 어떻게 할 수 있습니까?

  16. 16

    C #에서 상수 해시 세트를 어떻게 만들 수 있습니까?

  17. 17

    C #에서 MEF를 사용할 때 Export 특성에 대한 래퍼를 어떻게 만들 수 있습니까?

  18. 18

    Azure B2C에 연결할 때 oauth2_proxy를 어떻게 디버깅 할 수 있나요?

  19. 19

    C ++에서 분할 오류를 어떻게 수정할 수 있습니까?

  20. 20

    (A == B == C) 비교는 JavaScript에서 어떻게 작동합니까?

  21. 21

    a = a ^ b 문은 C ++에서 어떻게 작동합니까?

  22. 22

    C에서 구조체에 대한 포인터를 어떻게 할당 할 수 있습니까?

  23. 23

    칼리 시스템에서 C 언어로이 오류를 어떻게 해결할 수 있습니까?

  24. 24

    C #에서 CRC32를 부호있는 정수로 계산하려면 어떻게해야합니까?

  25. 25

    C ++에서 난수를 어떻게 생성 할 수 있습니까?

  26. 26

    Javascript에서 C ++ 함수를 어떻게 호출 할 수 있습니까?

  27. 27

    JS에서 C # 함수를 어떻게 호출 할 수 있습니까?

  28. 28

    Jquery Selector에서 C # ViewBag 변수를 어떻게 사용할 수 있습니까?

  29. 29

    C에서 gets () 함수의 문제를 어떻게 해결할 수 있습니까?

뜨겁다태그

보관