每当值 x 与值 y 模 3 相比正好大 1 时进行测试
Test whenever a value x is greater by exactly 1 compared to a value y modulo 3
如何检查 x 在 modulo 意义上(mod 3)比 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 的情况。我如何计算这个,以便在 modulo 意义上 $x 是 $y 乘以 1 的 'ahead' ?
Why is it that you used 0 for x
and 2 for y
? (Sorry, but I'm not much of an algebraist.)
虽然你的情况已经很清楚了,但 x
比 y
领先 1 位是没有意义的(至少对我来说是这样),而 0 < 2
.
我们知道,语句 (0 - 2) % 3
会是 -2
因为 mod 是 3,而 0 - 2
是-2,所以结果是-2.
数学有时会有一些不合逻辑的意义(在我看来),所以值得注意的是 0 根本不领先于 2(在编程变量的意义上)。
为了真正回答你的计算问题,你可以将 x = 0
和 y = -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
?>
我先解释一下我对你下面这句话的理解:
How do I check that x is 1 greater (ahead) of y in a modulo sense (mod 3)?
根据提供的示例,我假设您的意思是,如果将 1 添加到 $y,并且我们取 $y 的 mod 3,我们将得到 $ 的 mod 3 x.
考虑到这一点,我们可以编写以下代码,如果 $x 比 $y“领先”1, 将 return 为真。(我希望你能抽象出这个例子无论你面临什么情况):
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,0,3); //returns true
//$x = 2 and $y = 1
echo check(2,1,3); //returns true
//$x = 0 and $y = 1
echo check(0,1,3); //returns false because $x is 2 "ahead" of $y
如果你想要一个更通用的函数版本,具有任意差异,你可以使用这个(它应该适用于正负差异):
function check($x, $y, $mod, $diff) {
return $x % $mod == ($y + $diff) % $mod;
}
如何检查 x 在 modulo 意义上(mod 3)比 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 的情况。我如何计算这个,以便在 modulo 意义上 $x 是 $y 乘以 1 的 'ahead' ?
Why is it that you used 0 for
x
and 2 fory
? (Sorry, but I'm not much of an algebraist.)
虽然你的情况已经很清楚了,但 x
比 y
领先 1 位是没有意义的(至少对我来说是这样),而 0 < 2
.
我们知道,语句 (0 - 2) % 3
会是 -2
因为 mod 是 3,而 0 - 2
是-2,所以结果是-2.
数学有时会有一些不合逻辑的意义(在我看来),所以值得注意的是 0 根本不领先于 2(在编程变量的意义上)。
为了真正回答你的计算问题,你可以将 x = 0
和 y = -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
?>
我先解释一下我对你下面这句话的理解:
How do I check that x is 1 greater (ahead) of y in a modulo sense (mod 3)?
根据提供的示例,我假设您的意思是,如果将 1 添加到 $y,并且我们取 $y 的 mod 3,我们将得到 $ 的 mod 3 x.
考虑到这一点,我们可以编写以下代码,如果 $x 比 $y“领先”1, 将 return 为真。(我希望你能抽象出这个例子无论你面临什么情况):
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,0,3); //returns true
//$x = 2 and $y = 1
echo check(2,1,3); //returns true
//$x = 0 and $y = 1
echo check(0,1,3); //returns false because $x is 2 "ahead" of $y
如果你想要一个更通用的函数版本,具有任意差异,你可以使用这个(它应该适用于正负差异):
function check($x, $y, $mod, $diff) {
return $x % $mod == ($y + $diff) % $mod;
}