我有数据文件F_j,每个都包含一个带有未知小数位数的数字列表。每个文件包含一些连续变量的离散化测量值 我想找到文件F_j的离散化步骤d_j
我能提出的解决方案:对于每个F_j,
我正在寻找一种使用Matlab找到n_j的优雅方法。
另外,找到一长串整数的gcd似乎很难 - 你有更好的想法吗?
答案 0 :(得分:0)
找到一长串数字的gcd并非太难。您可以按照列表大小的线性时间进行操作。如果你运气好的话,你可以比线性的时间少得多。基本上这是因为:
gcd(a,b,c) = gcd(gcd(a,b),c)
如果a=1
或b=1
,则gcd(a,b)=1
,无论其他数字的大小如何。
因此,如果您有一个数字列表xs
,您可以
g = xs(1);
for i = 2:length(xs)
g = gcd(x(i),g);
if g == 1
break
end
end
变量g
现在将存储列表的gcd。
答案 1 :(得分:0)
以下是一些示例代码,我相信一旦您拥有想要查看的数字,这些代码将帮助您获得GCD。
A = [15 30 20];
A_min = min(A);
GCD = 1;
for n = A_min:-1:1
temp = A / n;
if (max(mod(temp,1))==0)
% yay GCD found
GCD = n;
break;
end
end
这里的基本概念是默认GCD将始终为1,因为每个数字本身都可以被整除,当然1
=)。 GCD也不能大于列表中的最小数字,因此我从最小的数字开始,然后用1进行描述。这假设您已经将数字转换为整数形式。小数将把它扔掉!
通过使用模数1,你正在测试数字是否是一个整数,如果不是,你将剩下一个大于0的余数余数。如果你预计必须处理否定你将必须调整这个测试!
除此之外,第一次找到一个数字,其中列表的模数(mod 1)全部为零,你就找到了GCD。
享受!