两个数的最大公约数与最小公倍数

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的乘积除以最大公约数;

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