求任意多数的最大公约数及最小公倍数的matlab实现

一般matlab里给出的gcd(a,b)函数求最大公约数只能有两个参数,如果输入gcd(1,2,3)就会出现出现如下错误:


所以如果求多个数的最大公约数就会出现问题,下面程序是对任意多个数求最大公约数:

function [maxgcd]=maxgcd(A)
n=length(A);
maxgcd=A(1);
for i=1:1:(n-1)
    maxgcd=gcd(maxgcd,A(i+1));
end
end

例如求4,8,12,24的最大公约数为:


除了求最大公约数,有时候也要求多个数的最小公倍数:

function [min_GBS]=min_GBS(A)
n=length(A);
maxA=max(A);
s=1;
k=0;
for i=1:1:n
s=s*A(i);
end
fla=false;
for i=maxA:1:s
    for j=1:1:n
if(mod(i,A(j))==0)
    fla=true;
    k=i;
else
    fla=false;
    break;
end 
    end
if(fla==true)
   min_GBS=k;
   return;
end
end
end

例如求4,8,12,16的最小公倍数就是48.


当然,我们在处理一些数据的时候有时候需要把分数化成整数,比如把多项式1/2*x^2+x+1/5化成整系数的形式:

5*x^2+10*x+2,且系数为互质的形式,此时需要求多个非整型的数据的“最小公倍数”:

function [min_double_GBS]=min_doub_GBS(A)
n=length(A);
% f_on=sym([]);
f_down=sym([]);
char fla=false;
for i=1:1:n
[~,f_down(i)]=numden(sym(A(i)));
end
% f_down
for i=1:1:n
if(f_down(i)~=1)
fla=false;
break;
else
fla=true;
end
end
if(fla==false)
GBS=min_GBS(f_down);
B=GBS*A;
min_double_GBS=min_GBS(B);
else
min_double_GBS=min_GBS(A);
end
% if(maxgcd(A)~=1)
% min_double_GBS
for i=1:1:n
A(i)=min_double_GBS/A(i);
end
% A
if(maxgcd(A)~=1)
d=maxgcd(A);
min_double_GBS=min_double_GBS/d;
end
end

注意:这个函数是需要调用上面两个函数的!

例如求1,1/2,3的“最小公倍数”为3,分别是乘以3,6,1


再例如求1,2/5,3的“最小公倍数”为6,分别是乘以6,15,2



  • 11
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值