我有一组数字{d1,d2,d3 ...... dn},其中,1< = di< = 9。 1·; = N< = 9
现在我想知道有多少个数字< = N,其中包含所有这些数字,任何顺序,所有这些数字也可以被这些数字整除。
我认为,只是从第一个长度为n的数字迭代到 N 并检查,但是有更有效的解决方案吗?
示例:
D = {2,3,5}且N = 10 ^ 10
有多少个数字,其中包含所有这些数字,也是2,3和5的倍数。
答案 0 :(得分:1)
如果您要进行迭代,那么您应该知道任何可被一组数字整除的数字也可以被这些数字的最小公倍数(我认为这是正确的术语)整除。
所以在你的情况下,如果一个数字可以被2和3和5整除,那么它也可以被30整除。
这应该加快你的迭代计划。
答案 1 :(得分:0)
我不确定你的问题是否想要只能被2,3和5整除的数字,或者如果你接受可被其他数字整除的数字,只要2,3和5属于除数。假设第一个选择:
首先,计算汉明数(可被2,3和5整除的数字); 10 ^ 10以下只有几千个,它们很容易计算。其次,检查每一个以确定它是否使用2,3或5以外的数字。
汉明数可以通过归纳来计算。从1开始,这是一个汉明数字。然后,如果 x 是汉明数字,那么2 x ,3 x 和5 x 。
如果您需要帮助将其减少为代码,请询问。
编辑:根据以下评论,您需要第二种选择("必须检查2和#34的所有倍数;)。然后考虑2,3和5的情况。首先生成包含2,3或5的所有1位数字,这是微不足道的。然后生成包含2,3或5的所有2位数字:22,23,25,32,33,35,52,53,55。依此类推每个 n - 数字,直到你的极限。最后,测试每一个的可分性;对于上面的列表,23和53将被排除在外,因为不能被2,3或5整除。
在任何一种情况下,诀窍是生成一组符合其中一个标准的数字,然后检查其他标准。