数字被17整除?

时间:2012-03-03 18:24:17

标签: algorithm math

给出最大1000位数的正数。你必须弄清楚这个数字是否可以被17整除。 我知道一种算法,它将最后一位数乘以5并从剩余数中减去,如果得到的数字可以被17整除,则该数字可以被17整除。 有没有更有效的方法?

3 个答案:

答案 0 :(得分:11)

你可以做的是迭代数字,跟踪当前值 modulo 17.当你到达目的地时,如果当前值 modulo 17是零,那么它是17的倍数;否则,不是。

例如,如果您的号码是"12345"(我假设您将此号码存储在十进制字符串中?),那么步骤为:

  • 0
  • 开头
  • (0 * 10 + 1) mod 171
  • (1 * 10 + 2) mod 1712
  • (12 * 10 + 3) mod 174
  • (4 * 10 + 4) mod 1710
  • (10 * 10 + 5) mod 173

因此12345 mod 17312345不能被17整除。

(当然,使用12345你可以先写12345 mod 17,但是数字很多,上面的方法让我们一次只能处理一下,这很方便,因为它意味着我们所有的数字都足够小,以适应处理器的本机32位或64位整数。)

答案 1 :(得分:2)

另一种变体。 10 8 是-1 mod 17.

所以取前8个数字,转换成数字,然后转换为%17,得到余数mod 17.然后重复接下来的8个数字,除了你这次减去数字。然后添加接下来的8位数字等。

这样可以减少字符串 - >数字转换次数,减少mod 17操作次数。

答案 2 :(得分:0)

鉴于我们在这里谈论计算机程序,最多只需要1000次迭代的简单算法就可以了。