互质数
此示例检查了Coprimes的Julia搜索算法的实现,该算法过滤数字集,只留下所有数字都是coprimes(它们的节点为1)的数字集。
导言
搜索互质数组的算法解决了过滤数组的问题,只留下所有数都是互质数的数组。 互质数是最大公约数(GCD)为1的数字。 这些数字集用于密码学,数论以及与分数和模块化算术相关的算法。
主要部分
数据准备
首先,我们定义一组数字列表,我们将检查互素性。 每个子列表是一组数字,我们要检查的节点。
In [ ]:
# 源数据:一组数字列表
data = [[21,15],[17,23],[36,12],[18,29],[60,15],[21,22,25,31,143]]
Out[0]:
现在让我们对这些数据应用过滤。 为此,请使用函数 filter,这将只留下满足条件的那些集合:集合中所有数字的最大公约数为1。
In [ ]:
# 过滤:我们只留下所有数字的节点为1的集合
# p是一组数字(例如,[21,15])
# gcd(p。..)-计算集合中所有数字的节点,通过"splat"(。..)
coprime_sets = filter(p -> gcd(p...) == 1, data)
Out[0]:
我们来分析一下表达式 gcd(p...) 更详细:
p—这是一个数字数组,例如,[21, 15].p...—这是"splat"运算符,它将数组扩展为单独的参数。 这就是gcd([21, 15]...)变成gcd(21, 15).gcd-Julia计算最大公约数的标准函数。
工作的结果
作为算法的结果,我们得到了一个列表,其中所有数字都是coprime的那些数字集。 相互简单意味着集合中所有数字的节点为1。
In [ ]:
# 结果的输出
println("相互简单的集合:")
for set in coprime_sets
println(set)
end
结论
在这个例子中,我们实现了一个搜索互质数组的算法,它过滤了数组,只留下所有数都是互质数的数组。 这在数字没有公共除数很重要的任务中很有用,例如在密码学中或在使用分数时。 我们使用了Julia的内置函数: filter, gcd 和运营商 ... 解开论点。
该示例是使用[Rosetta代码]的材料开发的(https://rosettacode.org/wiki/Coprimes )