快速取模3或除法算法?

有没有一种类似于2的幂的快速算法,可以与3(即n%3)一起使用。也许有些东西利用了一个事实,即如果数字的总和可以被三整除,那么数字也可以被整除。

这导致了下一个问题。在数字中添加数字的快速方法是什么?即37-> 3 +7-> 10我正在寻找没有条件的东西,因为那些会抑制向量化

谢谢

回答:

4 % 3 == 1所以(4^k * a + b) % 3 == (a + b) % 3。您可以使用此事实为32位x评估x%3:

x = (x >> 16) + (x & 0xffff);

x = (x >> 10) + (x & 0x3ff);

x = (x >> 6) + (x & 0x3f);

x = (x >> 4) + (x & 0xf);

x = (x >> 2) + (x & 0x3);

x = (x >> 2) + (x & 0x3);

x = (x >> 2) + (x & 0x3);

if (x == 3) x = 0;

(未经测试-您可能还需要一些简化。)这是否比硬件执行x%3的速度快?如果是这样,那可能不是很多。

以上是 快速取模3或除法算法? 的全部内容, 来源链接: utcz.com/qa/424882.html

回到顶部