如何解决一些代数表达式并找到从Java中求代数得到的数和GCD

时间:2015-07-14 22:29:18

标签: java algorithm algebra greatest-common-divisor

我正在编写一个java程序,它将找到数字N的GCD(最大公约数)。程序应该评估一些代数表达式。 lemme进一步解释; 1.计算√(N) 2.将上述(1)的结果除以18。 3.计算上面步骤(2)的上限功能,并将其命名为f。换句话说,f = [√(N)的上限函数除以18]。 4.在x中设置以下三个代数表达式,并从(a)到(c)顺序执行:

a)H1(x)=(N -1-18x),x将取0到f的值。 对于每个x,计算H1(x)和N的gcd。让我们称之为gcd,d。 即,d = gcd(N,H1(x))或(N,H1(x))。 如果d = 1,则将x增加1并继续这样做直到d> 1。 1或者你来x = f。 如果d> 1,你找到了一个N​​的重要除数。称之为q。 N的另一个除数是H1(x)的值除以q加1.我们称之为p。因此,p =(+1)。 然后说N的除数是p和q。然后提示输入另一个N或询问用户是否想要输入另一个N进行测试 - 使用Y / N选项。

但如果你找不到gcd> 1 = H1(x)在x = 0和x = f之间,移到下面的(b):

b)H2(x)=(N-11-18x),x的范围从0到f。 对于每个x,计算H2(x)和N的gcd。让我们称之为gcd,d。那是, d = gcd(N,H2(x))或(N,H2(x))。 如果d = 1,则将x增加1并继续这样做直到d> 1。 1或者你来x = f。

如果d> 1,你找到了一个N​​的重要除数。称之为q。 N的另一个除数是H2(x)除以q的值。我们称之为p。

因此,p =(+1)。 然后说N的除数是p和q。然后提示输入另一个N或询问用户是否想要输入另一个N进行测试 - 使用Y / N选项。

但如果你找不到gcd> 1为H2(x)在x = 0和x = f之间,移到下面的(c):

c)H4(x)=(N-13-18x),x的范围从0到f。 对于每个x,计算H4(x)和N的gcd。让我们称之为gcd,d。 如果d = 1,则将x增加1并继续这样做直到d> 1。 1或者你来x = f。 如果d> 1,你找到了一个N​​的重要除数。称之为q。 N的另一个除数是H4(x)除以q的值。我们称之为p。

因此,p =(+1)。

然后说明N的除数是p和q。

看看我到目前为止所做的事情;

public static void main(String[] args) {

    int num;
    double sqrtnum;
    double dividedsqrtnum;
    double f;
    int x = 0;
    float a;
    int d;
    float p;
    int q;

     Scanner input = new Scanner(System.in);

      System.out.println("Enter the number 'N'");
     num = input.nextInt();

     if( (num % 3) != 0){

         System.out.println( "The number you entered is a semi-prime");

         sqrtnum = Math.sqrt(num);

         dividedsqrtnum = sqrtnum / 18;

         f = Math.ceil(dividedsqrtnum) ;

         System.out.println("The value of f is " + f);

         // Algebraic expressions

         for (x=0; x <= f; x++){

             while (d == 1 || x ==f){

         a = (num - 1 - 18 * x);
    d = findGCD(num,a);
        if ( d == 1){

        x = x++;
        }

        else{
            q = d;
            p = (a / q + 1);

            System.out.println("The divisors of "+ num +" are "+ p +" and " + q +" do you want to test another number? Y or N " );
            }

                    }
                                }
                            }

     else{
         System.out.println("The number is not a semi-prime");

     }

}

 private static int findGCD(float num,float a) {
        //base case

        return findGCD(a, num%a);
    }

}

帮助我们,我真的卡住了。

0 个答案:

没有答案