我正在编写一个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);
}
}
帮助我们,我真的卡住了。