繁体   English   中英

在c中乘以大数

[英]Multiply large numbers in c

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

提前致谢

通常,您应该依靠这种关系:

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

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

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

#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;
}

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

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

备注:
该方法在计算机之前被广泛使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM