【MATLAB编程实例练习】-(28)具有公约数的最长数组

博客介绍了Mathwork's Cody中第84题——寻找连续整数对的最大公约数(GCD),展示了一段用于计算连续整数对最大公约数的代码,并通过两个测试用例展示了其正确性。代码使用动态规划方法,逐层计算数组中连续子序列的最大公约数。作者反思了自己的解决方案,鼓励自我提升。
摘要由CSDN通过智能技术生成

题目:

来源于Mathwork上的Cody,Problem 84 - Longest Divisor Run,

在这里插入图片描述
想得比较复杂了,下面画个简图帮助理解下,

在这里插入图片描述
代码,

function [len,d] = divisor_run(a)
      
      for j=1:length(a)-1
          
           D(1,j)=gcd(a(j),a(j+1));
           
      end
    
      for i=2:length(a)-1
          
          for j=1:length(a)-i
               D(i,j)=gcd(D(i-1,j),D(i-1,j+1));
          end
          
      end
      
      [row,col]=find(D>1);
      [A,I]=max(row);
      len=A+1;
      d=D(row(A),col(I));
end

测试,

>> clear;a=[5 4 2 8 3 7 14];[len,d] = divisor_run(a)

len =

     3


d =

     2
>> clear;a = [166 553 1241 869 237 395 1079 1577];[len,d] = divisor_run(a)

len =

     3


d =

    79

PS:看看人家的代码,再看看自己的,感觉要多学习学习了。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值