兩個數的最大公約數與最小公倍數

1.最大公約數(最大公因數)就是幾個數公有的因數中最大的一個 
例:12與18 12的因數有1,12,2,6,3,4 
18的因數有1,18,2,9,6,3 
公有的因數有1,2,3,6, 所以6就是12與18的最大公約數. 
而求最大公約數的方法可以總結爲:

①先判斷兩個數的大小,如果兩數相等,則這個數本身就 是就是它的最大公約數。 
②如果不相等,則用大數減去小數,然後用這個較小數與它們相減的結果相比較如果相等,則這個差就是它們的最大公約數,而如果不相等,則繼續執行②操作。

解法分析(更相減損法): 
例如: 有兩個數 12 18,它們的最大公約數爲6 
12 = 6 * a—————–12肯定是它最大公約數的倍數 
18 = 6 * b—————–18也肯定是它最大公約數的倍數 
18 - 12 = 6 *(b - a)——由結果可看出它們的差值肯定也是最大公約數的倍數 
12 - 6 = 6 ————-直到減數和差值相同時,則這個相同的數就是它們的最大公約數。(其原理就是用兩個數相等時,它本身就是最大公約數,因爲,除去第一次相減,其餘的每次減法都是用減數和差值相減,當然了,這僅僅是個人的看法,感覺這樣可以好理解一點)

module yueshu(clk,rst_n,a,b,yue);
 input clk,rst_n;
 input [7:0] a,b;
 output reg [7:0] yue;//最大公約數肯定不會超過輸入數據
 
 reg [7:0] temp,low;
 always @(a,b)
   begin
     if(~rst_n) 
	    begin
		     yue <= 'd0;
		end
	 else
	    begin
		   low=(a>=b)?b:a;//判斷小的數
		   temp=(a>=b)?(a-b):(b-a);
		   while(temp != low)
		     begin
			    low =(low > temp)?temp:low;
				temp=temp-low; 
			 end
		  yue = temp;
		end
   end
endmodule

對於最小公倍數,首先要求出最大公約數,然後由下面的公式求出最小公倍數:

lcm = a * b / gcd(a,b)

即a與b的乘積除以最大公約數;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章