当前位置: 首页 > 面试题库 >

快速取模3或除法算法?

唐啸
2023-03-14
问题内容

有没有一种类似于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的速度快?如果是这样,那可能不是很多。



 类似资料:
  • 本文向大家介绍Java语言实现快速幂取模算法详解,包括了Java语言实现快速幂取模算法详解的使用技巧和注意事项,需要的朋友参考一下 快速幂取模算法的引入是从大数的小数取模的朴素算法的局限性所提出的,在朴素的方法中我们计算一个数比如5^1003%31是非常消耗我们的计算资源的,在整个计算过程中最麻烦的就是我们的5^1003这个过程 缺点1:在我们在之后计算指数的过程中,计算的数字不都拿得增大,非常的

  • 本文向大家介绍Ruby实现的3种快速排序算法,包括了Ruby实现的3种快速排序算法的使用技巧和注意事项,需要的朋友参考一下 刚学Ruby,正巧算法老师鼓励用不熟悉的语言来写算法,我就用Ruby吧~~ 话说Ruby可真是超厉害,好多凭直觉的方法都可以用。。。。。无限膜拜中。。。。 期间我遇到了invalid multibyte char (US-ASCII)的错误,解决办法是在开头加一个#encod

  • 主要内容:快速排序算法的实现提到排序算法,多数人最先想到的就是快速排序算法。快速排序算法是在分治算法基础上设计出来的一种排序算法,和其它排序算法相比,快速排序算法具有效率高、耗费资源少、容易实现等优点。 快速排序算法的实现思路是: 从待排序序列中任选一个元素(假设为 pivot)作为中间元素,将所有比 pivot 小的元素移动到它的左边,所有比 pivot 大的元素移动到它的右边; pivot 左右两边的子序列看作是两个待排

  • 整数除法的硬件指令在历史上一直非常慢。例如,对于64位输入,Skylake上的DIVQ具有42-95个周期[1]的延迟(以及24-90的倒数吞吐量)。 然而,有一些新处理器性能更好:Goldmont有14-43延迟,Ryzen有14-47延迟[1],M1显然有“每分频2个时钟周期的吞吐量”[2],甚至Raspberry Pico也有“每核8周期有符号/无符号分频/模电路”(虽然这似乎适用于32位输

  • 我知道它是如何工作的,如果我不知道的话,网上有很多资料供我查阅。我在这里遇到的问题是,我找到的一些文章陈述如下(来自维基百科): 对数组重新排序,使所有值小于透视的元素都在透视之前,而所有值大于透视的元素都在透视之后(相等的值可以从任一方向移动)。分区后,枢轴处于其最终位置。这称为分区操作。 其他一些消息来源,(hackerrank视频): 第二种方法与枢轴本身无关,但它将确保所有比枢轴小的元素在

  • 3.快速入门 本章介绍Android 开发环境的搭建方法。这里列出了所需的各种软件的下载地址,也提供了构建开发环境的最佳实践。毕竟操作系统各有不同,开发工具也多种多样。面对诸多选择,对其长短优劣心里有数总是好的。 在本章的最后,你将拥有一个完整的开发环境。随后就可以动手编写/构建第一个 Hello World 程序,并在仿真器中(或者在真机上,只要你乐意)运行了。 Note: 下文将会使用~符号表

  • Docker 快速入门 本章节着重介绍Docker的具体使用,文章内容参照 官方文档 、网络资源结合自己实践经验整理撰写而成,若其中有解释不清楚,或者原文翻译问题出错,请及时与我联系纠正。 本章节分为四个部分: Docker安装 该部分介绍Docker在Centos7试验环境下的安装方法。 Docker镜像 该部分主要介绍 Docker利用Dockerfile来构建构建镜像文件。通常Dcokerf

  • 问题内容: 对于此Firebase数据提取,我在以下代码中错误地使用了下标,但是我无法弄清楚自己在做什么错。我在一行中使用下标模棱两可的错误。 我尝试应用从这篇文章中学到的知识,但是我无法弄清楚我所缺少的内容,因为我想让编译器知道“ as?[String:AnyObject]”是什么类型的字典。 任何想法或想法将不胜感激! 问题答案: 我处理数据的首选方式是尽可能早地拆开数据。