通常,在分析演算法的計算複雜性時,都將加法和乘法運算當作基本運算來處理,即將執行一次加法或乘法運算所需的計算時間,當作乙個僅取決於計算機硬體處理速度的常數。這個假定僅在參加運算的整數能在計算機硬體對整數的表示範圍內直接處理才是合理的。然而,在某些情況下,要處理很大的整數,它無法在計算機硬體能直接表示的整數範圍內進行處理。
若用浮點數來表示它,則只能近似的表示它的大小,計算結果中的有效數字也受到限制。若要精確地表示大整數並在計算結果中要求精確地得到所有位數上的數字,就必須用軟體的方法來實現大整數的算術運算。
設x和y都是n位的二進位制整數,現在要計算它們的乘積z。可以用小學所學的方法來設計計算乘積xy的演算法,但是這樣做計算步驟太多,效率較低。如果將每2 個1位數的乘法或加法看作一步運算,那麼這種方法要進行o(n^2)步運算才能算出乘積xy。
下面用分治法來設計更有效額大整數乘積演算法。
將n位二進位制數x和y都分為兩段,每段長n/2位(為簡單起見,假設n是2的冪)。則有:
其中x1、xo分別為x的高位和低位,y1、yo分別為y的高位和低位。c2是它們的前半部分的積;co是它們後半部分的積;c1是x、y兩部分的和的積減去c2與c0的積。如果n/2也是偶數,我們可以利用相同的方法來計算c2、co的和c1。
因此我們就得到了乙個計算n位數積的遞迴演算法:
在這種完美的形式下,當n變成1時,遞迴就停止了.或者當我們認為n已經夠小了,小到可以直接對這樣大小的數相乘時,遞迴就可以停止了.
該演算法會有多少次位乘呢?因為n位數的乘法需要對n/2位數做三次乘法運算,乘法次數m(n)的遞推式將會是:
當n>1時,m(n)=3m(n/2),m(1)=1
當n=2^k時,我們可以用反向替換法對它求解:
因為import
import
import
public class bigintegemultiply extends jframe});
resetbutton = new jbutton("reset all text content ");
new actionlistener()});
resultlabel = new jlabel("the result is :");
resultarea = new jtextarea(5,30);
jscrollpane(resultarea));
setsize(450,300);
setvisible(true);
}/**
* bigintmulresult() is to get the result an display the result in
* the inte***ce.
* */
public void bigintmulresult()
if(secondnum !=
secondnum =
tag += 1;
}firnumpart1 = firstnum / power(firstlen/ 2);
firnumpart2 = firstnum % power(firstlen/ 2);
secnumpart1 = secondnum / power(secondlen/ 2);
secnumpart2 = secondnum % power(secondlen/ 2);
long part1, part2 , part3;
long part4, part5;
part1 = firnumpart1 * secnumpart1;
part2 = firnumpart2 * secnumpart2;
part3 = (firnumpart1 - firnumpart2) * (secnumpart2 - secnumpart1) + part1 + part2 ;
part4 = firnumpart1 * secnumpart2;
part5 = firnumpart2 * secnumpart1;
if((firstlen + secondlen) > 18)
else if(firstlen == secondlen)
""+ result );
}else
""+ result );
}result = firstnum * secondnum;
}/**
* power() is to get the result of 10 multiply 10 for n times
* @param n
* @return powern
*/public long power( int n)
/** * reset the inte***ce text field.
* */
public void resetapplication()
/** * application entrance.
* * @param args
*/public static void main(string args)}
整數乘法運算推廣到小數
各位評委你們好!我是x號選手。今天我上課的內容是 整數乘法運算定律推廣到小數 師 上課,同學們好!師 孩子們,今天我們先來進行課前比賽,看誰的知識學得棒。第一輪 看誰算得對 口算 我們以 車的形式進行,小火車開起來,這列的孩子最想 車了,好,請你。2 5 25 4 125 8 20 0.5 2.5 ...
整數乘法運算定律運用到小數乘法反思
整數乘法運算定律推廣到分數乘法 的教學反思 萬里小學孫彬 面對新的課程改革,教師首先應該改變教學的行為,即把對新課程的理解轉化為自覺的教學行動。這就要求教師在教學行為的層面上,呈現出新課程的所蘊涵的新的教育理念和新的教學方式。在教學 整數乘法運算定律推廣到分數乘法 這一課後,我做了深刻的反思 一 注...
《整數乘法運算定律推廣到分數乘法》教學反思
面對新的課程改革,教師首先應該改變教學的行為,即把對新課程的理解轉化為自覺的教學行動。這就要求教師在教學行為的層面上,呈現出新課程的所蘊涵的新的教育理念和新的教學方式。在教學 整數乘法運算定律推廣到分數乘法 這一課後,我做了深刻的反思 一 注重了情境的匯入,提高孩子們的參與熱情 本節課,開啟課時,我...