在c中乘以大数

时间:2012-09-02 07:21:25

标签: c++ c

我有两个整数x和y 假设x = 10 ^ 5且y = 10 ^ 8 现在我必须将数字相乘并将它们存储在变量z中。我不需要具有确切的价值。 z的答案模数为100000009.我该怎么做?

提前致谢

3 个答案:

答案 0 :(得分:4)

一般来说,你应该依赖这种关系:

(a * b) % n = (a % n) * (b % n) % n

在这种特殊情况下,它没有多大帮助,因为ab都小于n,但对于较大的ab这可以保证您需要处理的最大乘法大约为n^2而不是a * b

在64位系统上,您当前的n^2值适合long。如果您预期更大的值,那么您将需要一个任意精度的数学库,如GMP

答案 1 :(得分:0)

#include <iostream>
#include <cmath>

int main() {
    typedef unsigned long long ull;
    ull x = std::pow(10,5);
    ull y = std::pow(10,8);
    ull z = (x*y) % 100000009;
    std::cout << z << std::endl;
}

答案 2 :(得分:0)

您可以使用对数和指数。指数是函数f(x)= e ^ x,其中e是一个等于2.71828182845的数学常量... 对数(用ln标记)是指数的倒数。

由于ln(a * b)= ln(a)+ ln(b),a * b = e ^(ln(a)+ ln(b))。

备注:
这种方法在计算机之前就被使用了。