当值 x 与值 y 模 3 相比正好大 1 时进行测试

问题描述

如何在模数意义上(mod 3)检查 x 是否比 y 大 1(领先)?

这是当 x = 0 和 y = 2 时,当 x = 1 时,y = 0,当 x = 2 时,y = 1。

我尝试过这样的测试:

PHP -a
PHP > $x = 0;
PHP > $y = 2;
PHP > echo ($x - $y) % 3;
-2
PHP > $x = 1;
PHP > $y = 0;
PHP > echo ($x - $y) % 3;
1
PHP > $x = 2;
PHP > $y = 1;
PHP > echo ($x - $y) % 3;
1

它不适用于 x = 0 和 y = 2 的情况。我该如何计算,以便在模数意义上 $x 比 $y 领先 1 倍?

解决方法

我先解释一下我对你下面这句话的理解:

如何在模数意义上(mod 3)检查 x 是否比 y 大 1(领先)?

根据提供的示例,我假设您的意思是,如果将 1 添加到 $y,并且我们取 $y 的 mod 3,我们将获得 $x 的 mod 3。

考虑到这一点,我们可以编写以下代码,如果 $x “领先” $y 1 则女巫将返回 true。(我希望您可以将该示例抽象为您面临的任何情况):

>
function check($x,$y,$mod) {
   return $x % $mod == ($y + 1) % $mod;
}
//$x = 0 and $y = 2
echo check(0,2,3); //returns true

//$x = 1 and $y = 0
echo check(1,3); //returns true

//$x = 2 and $y = 1
echo check(2,1,3); //returns true

//$x = 0 and $y = 1
echo check(0,3); //returns false because $x is 2 "ahead" of $y

如果你想要一个更通用的函数版本,有任意的差异,你可以使用这个(它应该适用于正负差异):

function check($x,$mod,$diff) {
   return $x % $mod == ($y + $diff) % $mod;
}
,

为什么您将 0 用于 x,将 2 用于 y? (抱歉,我不是代数专家。)

尽管您的情况已经非常清楚,但 xy 领先 1 位(显然是 0 < 2)是没有意义的(至少对我而言)。

正如我们所知,语句 (0 - 2) % 3 将是 -2,因为 mod 是 3,而 0 - 2 是 -2,所以结果是 -2 .

数学有时可能会有一些不合逻辑的意义(在我看来),因此值得注意的是,0 根本不领先于 2(在编程变量的意义上)。

并且要实际回答有关计算的问题,您可以将 x = 0y = -1 作为变量,根据语句的逻辑本身,然后将两个变量都加 1,然后结果还是一样。


证明:

<?php
    $x = 0
    $y = -1
    echo ($x - $y) % 3 // outputs 1
    echo (++$x - ++$y) % 3 // still outputs 1
    echo (++$x - ++$y) % 3 // also outputs 1
    echo (++$x - ++$y) % 3 // yep,still the same
    echo (++$x - ++$y) % 3 // alright,you get the deal
?>