【问题标题】:How many numbers are there upto N which have digits 2,3,5 and divisible by 2,3,5?到 N 为止有多少个数字是 2,3,5 并且可以被 2,3,5 整除?
【发布时间】:2016-07-05 00:45:23
【问题描述】:

我有一组数字 {d1,d2,d3......dn} 其中 , 1

现在我想知道有多少个数字

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

例子:

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

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

【问题讨论】:

  • 在无缘无故投反对票之前至少发表评论并说明问题所在?
  • 我没有投反对票,但投反对票按钮有一个工具提示“这个问题没有显示任何研究工作......”。这可能适用于这里——如果你包括你尝试过的东西和你卡在哪里的证据,你可能会得到支持和更有帮助的答案。如果您真的不知道从“尝试每个数字到 10^10”之外从哪里开始,那么您可能正在尝试目前对您来说太难的问题,您现在应该将学习精力集中在更简单的问题上。这并不是一种侮辱,而只是在您尝试改进时需要考虑的事情。
  • 22350 包含 2,3 和 5 作为数字。它可以被 2,3 和 5 整除。“包含这些数字的数字可以被 2 整除,它必须以 2 结尾,但要被 5 整除,它必须以 5 结尾”???
  • 我将“其中包含所有这些数字,以任何顺序”解释为仅包含这些数字。我现在明白你的意思是它必须包含 D 中的每个数字中的至少一个。我将删除我的评论,因为它基于这个错误的假设。
  • 您说“22350”是一个解决方案,但它不是由您接受的答案生成的(它只生成包含 D 数字的解决方案)。

标签: algorithm prime-factoring number-theory


【解决方案1】:

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

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

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

【讨论】:

  • 所以,这样我就可以查找 30 的倍数,看看它们是否包含 2,3 和 5 作为它们的数字。但是,它的复杂性仍然是 N*log(N)/30 。它只会将时间减少 lcm(d1,d2,d3....dn) 倍。有没有更快的方法?顺便说一句,感谢这种方法。
【解决方案2】:

我不确定您是否想要只能被 2、3 和 5 整除的数字,或者您是否会接受可被其他数字整除的数字,只要 2、3 和 5 在除数中。假设第一种选择:

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

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

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

编辑:根据下面的评论,您需要第二种选择(“必须检查 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 整除。

在任何一种情况下,诀窍都是生成一小组满足其中一个标准的数字,然后检查其他标准。

【讨论】:

  • 谢谢。但是如果 D = {2} then ,这将是一个问题,因为我必须以这种方式检查所有 2 的倍数。
  • 不相关,但我认为您对汉明数的定义不正确。汉明数可以被 2、3、和/或 5整除...但不一定是 2、3、 5。rosettacode.org/wiki/Hamming_numbers
猜你喜欢
  • 2021-03-09
  • 1970-01-01
  • 2020-12-06
  • 1970-01-01
  • 1970-01-01
  • 2022-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多