Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用模求解Java中的方程_Java_Algorithm_Math_Equation - Fatal编程技术网

用模求解Java中的方程

用模求解Java中的方程,java,algorithm,math,equation,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;

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

你可以用数学大大改进你的解答。你需要找到一个乘以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)
所以你的问题的唯一解决方案是给出余数3(模7)的数字,所有这些数字都是方程的解

(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)

(1080*j+1)mod 7=0=>1080*j=1(mod 7)
。因此,您可以使用
0
6
的循环,如下所示:

int j;
for(int i=0; i<7; i++){
    if((1080*i) % 7==1) {
         j=i; break;
    }
}
intj;

对于(int i=0;i,这里有一种简化方程的方法:-

(1080*j+1)模数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是任意整数 数


他可能需要用“更长的时间”来编写这个算法因为他的任务要求,所以你的捷径对他来说可能有问题use@nrathaus是的,但问题是有没有更安全的方法。我认为我的解决方案更快更安全。好吧,虽然这看起来像是家庭作业,但你不希望他得到F,因为他的回答不同:)@nrathaus-这段代码不是家庭作业,它是用于测试目的的RSA算法实现的一部分:)非常好。。。如果您也添加了实现,那么这将是OP想要的答案。例如,3+7X,其中X是任何正整数,结果是一个有效的J。Js(3,10,17,24,31,38,45…等等)@splrs-是的,但我不高兴,因为可能是不定式循环。它不是不定式,(1080*j+1)%7的值是周期性的,周期不大于7