algorithm - 检查数字 N 是否是 3 和 5 的倍数之和,因为 N 可能大到 100,000

标签 algorithm optimization

<分区>

鉴于数字可能大到 100,000,我如何检查数字是否是 3 和 5 的倍数之和。我需要一种优化的方法来将数字分成两部分,这样两部分是3和5的倍数,而3的倍数大于部分是 5 的倍数,如果不可能进行这种拆分,那么我需要拒绝该数字。

例如:

1  => cant be split so rejected ,
35 => 30 + 5 ,
65 => 60 + 5 (Though 30 + 35 could be a split but since part which is multiple of 3 has to be                greater than the part which is multiple of 5),
11 => 6+5 

最佳答案

每个(整数)数模 3 产生 0、1 或 2。

所以让我们检查所有情况(n > 3 必须屈服,原因很明显):

  1. n % 3 == 0。简单:我们只需将 0 == 0 * 5n/3 作为拆分即可。
  2. n % 3 == 2。再次简单:一个数字将是 5,另一个是 (n-5)/3。当从 n 中减去 5 时,我们将创建第二个数字 (n-5),它属于第一种情况。
  3. n % 3 == 1。与情况 2 相同,但这次我们减去 10 == 2*5

    一个小问题是 3 的倍数必须大于 5 的倍数这一属性。要实现这一点,n 必须至少为 22。( 22 == 2 * 5 + 3 * 4).

因此所有小于 22 且具有 n % 3 == 1 属性的数字都必须被拒绝:4、7、10、13、16 和 19。 (只要倍数的因数必须是非负的)。

关于algorithm - 检查数字 N 是否是 3 和 5 的倍数之和,因为 N 可能大到 100,000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18683426/

相关文章:

node.js - node.js 真的没有优化对 [].slice.call(arguments) 的调用吗?

c++ - 比较是否意味着分支?

algorithm - 语法入门类(class) - Squitor

java - 行和列中没有重复项的二维数组

c - 在汇编中实现矩阵 vector 乘法

performance - 一篇关于现代 CPU 特性/性能优化的好文章?

c - 处理器行为解释

java - 字符串连接未按预期工作

JavaScript - 如何在节点搜索中返回树的分支?

algorithm - 给定要拼接的索引数组,生成删除每个元素的顺序