用模数解决Java中的等式

时间:2013-12-30 13:45:35

标签: java algorithm math equation

我需要在我的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);

4 个答案:

答案 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)。因此,您可以使用从For0的{​​{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是任意整数   编号