*************************************************************
此程序 采用分治法进行乘法运算
* 求 1011*1101
* coder: 九天神龙
* 运行结果:
* H:/Java/算法/大整数~1>javac mult.java
*
* H:/Java/算法/大整数~1>java mult
* 11x13 结果为: 143
*
* H:/Java/算法/大整数~1>
**************************************************************/
import java.lang.*;
class mult{
public int x,y; //本题要求积的两个数
//初始化本题中要求的两个数
mult(){
x=11; //二进制的 1011
y=13; //二进制的 1101
}
//**************************************************
// 函数名 getvalue,此函数为本算法的主函数
// 反回值为指定数xy的积
// 根据公式 XY=A*C*2n+((A-B)(D-C)+AC+BD)*2n/2+BD
// 共有3次乘法,6次加法,2次移位
//**************************************************
public int getvalue(int a,int b,int c,int d){
int n=4; //所求数的位数
return (a*c*(2<<(n-1))+
((a-b)*(d-c)+a*c+b*d)*
(2<<(n/2-1))+
b*d);
}
public static void main(String[] args){
int n=2;
mult mu=new mult();
int a,b,c,d;
//将原乘数分解
a=mu.x>>n;
b=mu.x&3;
c=mu.y>>n;
d=mu.y&3;
int ret=mu.getvalue(a,b,c,d);
//output result
System.out.println(""+mu.x+"x"+mu.y+" 结果为: "+ret);
}
}
相关推荐
用分治法实现两个二进制数的大整数乘法(带界面)
大整数分解问题:给定两个n位长二进制数x和y,求这两个数的乘积。时间复杂性控制在Θ(n1.6)
[JAVA]大整数乘法(分治法)
大整数乘法是一种用于计算两个非常大的整数相乘的方法,通常超出了计算机硬件所能直接处理的范围。在这种情况下,我们需要使用一些特殊的算法来处理这类问题。本文将详细介绍大整数乘法的分治算法。
用递归分治算法解决大整数乘积问题 java实现
算法分析与设计 用递归分治算法解决大整数乘积问题(用java语言)
分治法实现大数相乘二进制(java)
算法原理 大数相乘也采用分治法的思想,即将一个大数分成若干小数去计算。 通过计算多组2位数整数乘法,可以得出来一个规律AB * CD = AC (AD+BC) BD。如果BD相乘超过一位数,需要进位;(AD+BC+低位进位)如果超过一位数,需要进位。 假设M位二进制数和N位二进制相乘, 如果两个数M和N的长度都小于等于1位数,则直接返回X*Y的结果的字符串形式。 如果M、N长度不一致,补齐M高位0(不妨设N>M),使都为N位整数。 N/2取整,得到整数的分割位数。将M、N拆分成m1、m2,n1,n2.
大整数乘法分治法 java,大整数的乘法(分治法)
function MULT(X,Y,n); {X和Y为2个小于2n的整数,返回结果为X和Y的乘积XY}beginS:=SIGN(X)*SIGN(Y); {S为X和Y的符号乘积}X:=ABS(X);Y:=ABS(Y); {X和Y分别取绝对值}if n=1 thenif (X=1)and(Y=1) then return(S)else return(0)else beginA:=X的左边n/2位;B:...
(zz)采用分治法进行大数乘法运算 (java)
/************************************************************** 此程序 采用分治法进行乘法运算* 求 1011*1101* coder: 九天神龙* 运行结果:* H:/Java/算法/大整数~1>javac mult.java** H:/Java/算法/大整数~1>java mult* 11x13 结果为: 143** H:
java分治法求最大最小值_(zz)采用分治法进行大数乘法运算 (java) | 学步园...
/************************************************************** 此程序 采用分治法进行乘法运算* 求 1011*1101* coder: 九天神龙* 运行结果:* H:/Java/public int x,y; //本题要求积的两个数//初始化本题中要求的两个数mult(){x=11; //二进制的 1011y=13; //二...
采用分治法进行大数乘法运算
/************************************************************** 此程序 采用分治法进行乘法运算* 求 1011*1101* coder: 九天神龙* 运行结果:* H:/Java/算法/大整数~1>javac mult.java** H:/Java/算法/大整数~1>java mult*
java大整数乘法分治法,大数相乘(分治法, C/C++)
1、分治法有两点需要理解:(1)分治法基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相同。(2)递归的解这些子问题,然后将各子问题的解合并得到原问题的解。分治法的重点是分析问题是否可以划分为规模较小的子问题,难点是如何划分以及划分之后如何将各个子问题的解合并成最终的解。这一般需要用到数学知识或者其他理论。以大数相乘为例,有A,B两个大数,都为n位,要计算A*...
大整数乘法(分治法)
大整数乘法(分治法)实验报告,包括问题描述、问题分析、复杂度分析、源代码以及运行结果截图,100%可以运行。
二进制数相乘-分治法-C语言实现
二进制数相乘 分治法 C语言实现 优化了二进制的乘法 是的时间复杂度降低了
分治法解决大整数乘法问题
通常,在分析算法的计算复杂性时,都将加法和乘法运算当作基本运算来处理,即将执行一次加法或乘法运算所需的计算时间,当作一个仅取决于计算机硬件处理速度的常数。这个假定仅在参加运算的整数能在计算机硬件对整数的表示范围内直接处理才是合理的。然而,在某些情况下,要处理很大的整数,它无法在计算机硬件能直接表示的整数范围内进行处理。若用浮点数来表示它,则只能近似的表示它的大小,计算结果中的有效数字也受到限制。若
手撸代码系列(十)之分治法经典练习案例
第八期:实现大数乘法(Java) 题目分析:以123456789*987654321为例 第一步: 当两个数都小于等于4位的时候,我们可以直接利用整数乘法进行相乘。(9999*9999=9998,0001,在int类型数据范围之中,而且很保守) 第二步:如果数 a 大于4位,我们对 a 进行平均切分成两段。a1=1234{a_1} = 1234a1=1234(高位)和 a2=56789{a_2}...
java大数运算详解【其五】大数乘法之平方算法之ToomCook3平方算法
1.3、ToomCook3平方算法(三分展开式算法) /** * 使用3路Toom-Cook平方算法平方一个大整数。 * 当两个数字都大于某一阈值时(实验发现),应该使用它。 * 它是一种递归分治算法,其渐近性优于squareToLen和squareKaratsuba算法。 */ private BigInteger squareToomCook3() { int len = mag.length; // k是...
java大数乘法分治_分治法的经典问题——大整数相乘
分治法的经典问题——大整数相乘分治法的原理分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。即一种分目标完成程序算法,简单问题可用二分法完成。(来自度娘的搬运工)简单的说,分治就是分而治之,把一个问题拆分成几个小问题,最后再汇总解决的办法。有两点需要记住:(1) 分治法基本思想是将一个规模为n的问题分解为k...
经典算法之分治法 大数相乘
题目描述: 用串的形式表示大数的乘法。 即求类似: "23234845847839461464158174814792" * "6457847285617487843234535" 要求结果返回一个串。 解题思路: 采用分治法解题.具体方式已在代码中注释. 代码实现: import java.util.Scanner; public class Main {
用分治法实现大数乘法,加法,减法(java实现)
大数乘法即多项式乘法问题,求A(x)与B(x)的乘积C(x),朴素解法的复杂度O(n^2),基本思想是把多项式A(x)与B(x)写成 A(x)=a*x^m+b B(x)=c*x^m+d 其中a,b,c,d为x的多项式。 则A(x)*B(x)=(ac)*x^2m+(ad+bc)*x^m+bd 由ad+bc=(a+b)(c+d)-ac-bd 原来的4次乘法和1次加法由3...
1191


&spm=1001.2101.3001.11974&articleId=3861066&d=1&t=3&u=ab25efa5f93641b98f345b1747e6d646)

被折叠的 条评论
为什么被折叠?



