我需要在我的Java应用程序中解决这个等式:
(1080 * j + 1) modulo 7 = 0
是否有更安全的方法来获取此值而不是此代码?我对while
循环条件不满意。
int j = 1;
int e = 7;
boolean found = false;
double r = 0;
while (!found) {
r = (1080 * j + 1);
found = r % e == 0;
j++;
}
int t = (int) (r / e);
答案 0 :(得分:2)
您可以使用数学显着改善您的解决方案。你需要找到一个乘以1080的数字,给出余数6模7(因为加1后它应该被7整除)。现在1080给出余数2模7。因此你需要找到乘以2得到6模7的数。让我们检查所有7个可能的余数:
0 * 2 = 0 (modulo 7)
1 * 2 = 2 (modulo 7)
2 * 2 = 4 (modulo 7)
3 * 2 = 6 (modulo 7)
4 * 2 = 1 (modulo 7)
5 * 2 = 3 (modulo 7)
6 * 2 = 5 (modulo 7)
因此,问题的唯一解决方案是给出remainder 3 (modulo 7)
的数字,所有这些数字都是等式的解。
答案 1 :(得分:0)
(1080*j + 1)% 7 =((1080*j)%7 + 1%7 )%7
(1080*j)%7 = ((1080%7)*(j%7))%7 = (2*(j%7))% 7
实际上,j只需要从0运行到6,因为你可以清楚地看到这是一个周期循环,它可以帮助你避免无限循环,以及任何数字(不是必需的7)
答案 2 :(得分:0)
(1080*j+1) mod 7 = 0 => 1080*j = 1 (mod 7)
。因此,您可以使用从For
到0
的{{1}}循环:
6
答案 3 :(得分:0)
这是一种简化等式的方法: -
(1080 * j + 1)mod 7 = 0
(1080 * j)mod7 = 6
通过模运算的乘法定理: -
(a * b)%k =(a%k * b%k)%k因此(1080 * j)%7 =(1080%7 * j%7)
1080%7 = 2
因此(1080 * j)%7 =(2 * j%7)%7 = 6
现在j%7可能有值(0,1,2,3,4,5,6)
现在所有可能的值j%7 = 3将给出(2 * 3)%7 = 6
j%7 = 3
因此,j = k * 7 + 3是等式的解,其中k是任意整数 编号