gpt4 book ai didi

c++ - 如何快速评估零集?

转载 作者:IT老高 更新时间:2023-10-28 21:38:49 26 4
gpt4 key购买 nike

最近code golfing post询问在 C 中快速实现的可能性如下(假设 n 是无符号整数):

if (n==6 || n==8 || n==10 || n==12 || n==14 || n==16 || n==18 || n==20)

一种可能的简化是观察数字 a[]={6,8,10,12,14,16,18,20} 形成一个 arithmetic progression ,所以移动范围,然后使用一些 bitwise tricks

如果 (((n - 6) & 14) + 6 == n)

导致实现更短(并且可能确实更有效),如 answered约翰·博林格。

现在我要问的是什么是类似优雅(并且希望同样有效)的实现

if (n==3 || n==5 || n==11 || n==29 || n==83 || n==245 || n==731 || n==2189)

提示:这一次数字 a[k] 形成了一个几何级数:a[k]=2+3^k

我猜在一般情况下,最好的方法是对数字 a[k] 进行排序,然后进行对数搜索以测试 n 是否是排序数组。

最佳答案

if ((n > 2) && (2187 % (n - 2) == 0))

检查 (n - 2) 是否是 3 的幂并且小于或等于 2187(3 的幂7)

作为概括,要检查任何无符号整数 n 是否是质数 k 的幂,您可以检查 n 是否除以k 的最大幂,可以存储在无符号整数中。

关于c++ - 如何快速评估零集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36977353/

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