可以被1到20的所有数字整除的最小正数是多少?
我可以轻松地用一个带有循环的命令式编程语言来强制解决这个问题.但是我想在Haskell中做到这一点而不是让循环变得更难.我在考虑做这样的事情:
[n | n <- [1..], d <- [1..20], n `mod` d == 0] !! 0
Run Code Online (Sandbox Code Playgroud)
但我知道这不会起作用,因为"d"会使条件在d = 1时等于True.我需要提示如何制作它以便n modd计算为[1..20]并且可以验证全部20个号码.
再次,请不要给我一个解决方案.谢谢.
与许多Project Euler问题一样,这至少与数学和编程有关.
您正在寻找的是一组数字中最不常见的倍数,它们恰好位于从1开始的序列中.
在函数式语言一个可能的策略是试图使递归基础上找出所有的最小数整除之间的关系[1..n],最小数量由所有的整除[1..n+1].用一些小于20的数字来玩这个并尝试理解数学关系或者可能辨别一个模式.
在找到这样的数字之前不要搜索,而是考虑一个建设性的算法,在给定一组数字的情况下,你构造可被整除的最小(或最小)正数(又名"是"的常见倍数)所有这些数字.看看那里的算法,并考虑Euclid的算法(他们提到的)如何应用.
你能想到两个数字之间在最大公约数和最小公数之间的关系吗?一组数字怎么样?