大整数乘法

                                                                                     大整数乘法                                                                                                                                                          

分析算法计算复杂性时,加法乘法当做基本运算来处理,即一次加法或者乘法当做一个仅取决于计算机硬件处理速度的常数。

正常的二进制整数X,Y要用O(n2)才能算出。如果分割为两段,

X=A2^(n/2)+B,Y=C2^(n/2)+D。

XY = (A2^(n/2)+B)(C2^(n/2)+D)=AC2^n+(AD+BC)2^(n/2)+BD

要进行4次N/2位整数的乘法,以及3次不超过2n为的整数加法,好要做2次移位。

T(n) = O(n^2);

XY=AC2^n+((A-B)(D-C)+AC+BD)2^(n/2)+BD

仅作3次N/2位整数的乘法,6次加减法,2次移位..

时间复杂度变为t(n)=O(n^1.59)

本文转自博客园xingoo的博客,原文链接:大整数乘法,如需转载请自行联系原博主。

时间: 2024-10-31 18:48:00

大整数乘法的相关文章

大整数乘法:给定两个长度不超过10000的整数并返回乘法的结果

题目: 大整数乘法, 给定两个长度不超过10000的整数, 返回乘法的结果. char* multi(char* number_a, char* number_b) 代码: /* * test.cpp * * Created on: 2014.04.24 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include <iostream> #include <cstring> using namespace std; char* mul

大整数乘法求解

问题描述 大整数乘法求解 输入两大整数(都是200位内 非负 没前导零) 求其相乘 没看出什么问题 提交网站却显示WA 求点拨 解决方案 #include #include using namespace std; int main(){ int cc=0; char str[201],ptr[201]; int st[201]={0}; int pt[201]={0}; int a[410]={0}; cin>>str; cin>>ptr; int ls=strlen(str);

acm icpc-一个大整数乘法的acm题目问下,可以得话给个代码,谢谢了,想了挺久,没做出来

问题描述 一个大整数乘法的acm题目问下,可以得话给个代码,谢谢了,想了挺久,没做出来 T4:两两相乘的积为12!的个数 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65535kB 描述 找出输入数据中所有两两相乘的积为12!的个数. 输入 输入数据中含有一些整数n(1≤n< 2^32 ). 输出 输出所有两两相乘的积为12!的个数. 样例输入 1 10000 159667200 9696 38373635 1000000 479001600 3 1 479001600 样例

大整数乘法的算法分析(r12笔记第42天)

   昨天看了下Paxos协议,比我想象的要复杂.每次都没能耐着性子看完.但是隐隐感觉就跟钓鱼一般(尽管我没用真实试过),如果有耐性,能坚持还是能够明白的.   于是乎,我拿起了大学学习的一本算法书,突然发现里面有很多我早已忘记的东西,记得有一个算法我琢磨了好几天,结果老师上课几分钟就讲完了,所以大学里算法课真是让人费神的课程,工作以后算法自己去写的场景还是少很多,我们更多是去用,但是实际证明不是不重要,而是我们自己没有重视.    如果让自己的写一些,就会发现真是漏洞百出.    我看了一个有

大整数四则运算-求java大整数的四则运算解题思路,把具体用什么知识点讲解出来

问题描述 求java大整数的四则运算解题思路,把具体用什么知识点讲解出来 package org.suanfa.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Test1 { private boolean isPositive=true; private String number="0"; public Te

大整数的排序算法-C++大整数运算 利用已有的大整数怎么实现三个运算

问题描述 C++大整数运算 利用已有的大整数怎么实现三个运算 我有以下的C++代码,请问我该如何实现以下三个运算?如果我在定义大整数的类中定义三个友元函数,能否直接使用我定义的"运算符重载"?a) 求出100以内的数的阶乘:b) 一个N位的十进制正整数,如果它的每个位上的数字的N次方的和等于这个数本身,则称其为花朵数.当N=4时,1634满足条件,因为1^4 + 6^4 + 3^4 + 4^4 = 1634(其中"^"表示乘方),求N=21时,所有满足条件的花朵数.

C语言实现大整数加减运算详解_C 语言

前言     我们知道,在数学中,数值的大小是没有上限的,但是在计算机中,由于字长的限制,计算机所能表示的范围是有限的,当我们对比较小的数进行运算时,如:1234+5678,这样的数值并没有超出计算机的表示范围,所以可以运算.但是当我们在实际的应用中进行大量的数据处理时,会发现参与运算的数往往超过计算机的基本数据类型的表示范围,比如说,在天文学上,如果一个星球距离我们为100万光年,那么我们将其化简为公里,或者是米的时候,我们会发现这是一个很大的数.这样计算机将无法对其进行直接计算.     可

python里大整数相乘相关技巧指南_python

问题 大整数相乘 思路说明 对于大整数计算,一般都要用某种方法转化,否则会溢出.但是python无此担忧了. Python支持"无限精度"的整数,一般情况下不用考虑整数溢出的问题,而且Python Int类型与任意精度的Long整数类可以无缝转换,超过Int 范围的情况都将转换成Long类型. 例如: >>> 2899887676637907866*1788778992788348277389943 5187258157415700236034169791337062

可用于数论计算的无符号大整数类

前些日子,无意中访问到三思科学网,里面介绍了许多数论问题,这也是我儿时的爱好,于是就利用空闲时间编写了一个用于数论计算的无符号大整数类. 一.类的基本结构Class CUSuperInt { public: //构造及析构函数 CUSuperInt(); CUSuperInt(DWORD dwValue); CUSuperInt(char* pszVal); CUSuperInt(CUSuperInt& x); virtual ~CUSuperInt(); protected: DWORD *p