gpt4 book ai didi

确定数字是否在模块化算术中的两个数字之间的算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:30:11 24 4
gpt4 key购买 nike

我正在尝试编写一个函数来回答这个问题:如果您从 a 开始计数并在 b 处停止计数, 是 c在那个范围内(也就是 c 介于 ab 之间)。

通常 a < c && c < b就足够了,但我在模块化算术:

(Diagram)

逆时针递增

绿色:是 c 的值,其中算法应指示为真(其中 c 介于 a 和 b 之间)

蓝色:是算法应指示 false 的 c 值(其中 c 不在 a 和 b 之间)(恰好与 c 在 b 和 a 之间的位置相同)

简单的a < c && c < ba 的范围内失败和 b越过 0。

例如,假设 A = 300 和 B = 45。如果 C 为 10,则该函数应返回 true:300, 301, 302 ... 359, 0, 1, 2, 3 ... 8、9、10、11、12 ... 43、44、45。因此,10 在 mod 360 中介于 300 和 45 之间。

最终,我要确定的是一种色调是否介于其他两种色调之间,其中色调以围绕色轮(这是一个 mod 360 系统)的度数指定。如果答案是 mod n 的话那就太好了,这样它就可以解决一般情况,而不是针对我的问题。

最佳答案

首先计算a mod n , b mod n , 和 c mod n .

如果a < b然后我们需要检查 a < c && c < b .这是一个简单的案例,其中模运算没有发挥很大的作用。

因为 [a, b] 和 [b, a] 形成不相交的区域,而不是试图处理交叉 0 的问题,我们可以对 b < a 的情况进行反向测试.如果b < c && c < a是真的,c 实际上在 b 和 a 之间,因此不在 a 和 b 之间。

代码示例:

a = a % n;  // % = mod
b = b % n;
c = c % n;

if (a < b) {
if (a < c && c < b) return true;
else return false;
} else { // b < a
if (b < c && c < a) return false; // if in [b, a] then not in [a, b]
else return true;
}

关于确定数字是否在模块化算术中的两个数字之间的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31862727/

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