有多少个数字是 2,3,5 并且能被 2,3,5 整除的 N 个数?

How many numbers are there upto N which have digits 2,3,5 and divisible by 2,3,5?

我有一组数字 {d1,d2,d3......dn} 其中,1<=di<=9。 1<=n<=9

现在我想找出有多少个数字 <=N 其中包含所有这些数字,顺序不限,并且所有这些数字也可以被这些数字整除。

我认为的方法只是从长度为 n 的第一个数字迭代到 N 并检查,但是有更有效的解决方案吗?

示例:

D = {2,3,5} 和 N = 10^10

有多少个数字包含所有这些数字,并且也是 2,3 和 5 的倍数。

如果您只是要迭代,那么您应该知道任何可被一组数字整除的数字也将被这些数字的最小公倍数(我认为这是正确的术语)整除。

所以在你的情况下,如果一个数可以被 2、3 和 5 整除,那么它也可以被 30 整除。

这应该会加快您的迭代计划。

根据你的问题,我不确定你是否想要只能被 2、3 和 5 整除的数字,或者你是否愿意接受可以被其他数字整除的数字,只要 2、3 和 5 在除数。假设第一个选择:

首先,计算汉明数(可被 2、3 和 5 整除的数字); 10^10以下只有几千个,而且很容易计算。其次,检查每一个以确定它是否使用 2、3 或 5 以外的数字。

汉明数可以通过归纳法计算出来。从 1 开始,这是一个汉明数。那么,如果x是一个海明数,那么2x、3x和5x.

如果您需要帮助将其简化为代码,请询问。

编辑:根据下面的评论,您需要第二种选择 ("have to check all multiples of 2")。然后考虑 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 整除。

无论哪种情况,技巧都是生成一小组满足其中一个条件的数字,然后检查其他条件。