gpt4 book ai didi

c++ - 快速整除测试(2、3、4、5、..、16)?

转载 作者:IT老高 更新时间:2023-10-28 12:34:58 33 4
gpt4 key购买 nike

最快的整除测试是什么?比如说,给定一个 little-endian 架构和一个 32 位有符号整数:如何快速计算出一个数字可以被 2、3、4、5、... 最多 16 整除?

警告:给定的代码仅为示例。每条线都是独立的!在许多没有 DIV 硬件(如许多 ARM)的处理器上,使用模运算的明显解决方案很慢。一些编译器也无法进行此类优化(例如,如果除数是函数的参数或依赖于某些东西)。

Divisible_by_1 = do();
Divisible_by_2 = if (!(number & 1)) do();
Divisible_by_3 = ?
Divisible_by_4 = ?
Divisible_by_5 = ?
Divisible_by_6 = ?
Divisible_by_7 = ?
Divisible_by_8 = ?
Divisible_by_9 = ?
Divisible_by_10 = ?
Divisible_by_11 = ?
Divisible_by_12 = ?
Divisible_by_13 = ?
Divisible_by_14 = ?
Divisible_by_15 = ?
Divisible_by_16 = if(!number & 0x0000000F) do();

和特殊情况:

Divisible_by_2k = if(number & (tk-1)) do();  //tk=2**k=(2*2*2*...) k times

最佳答案

在所有情况下(包括可被 2 整除):

if (number % n == 0) do();

使用低位掩码进行与运算只是混淆,使用现代编译器不会比以可读方式编写代码快。

如果你必须测试所有的情况,你可以通过将一些情况放在 if 中来提高性能:如果被 2 整除,那么测试被 4 整除是没有意义的例如,已经失败了。

关于c++ - 快速整除测试(2、3、4、5、..、16)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6896533/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com