Попробуйте что-нибудь подобное. Алгоритм Евклида GCD в основном говорит это: GCD из 2 чисел (мы будем называть их больше и меньше) равен GCD меньшего числа и разности между большим и меньшим числом. Повторяйте процедуру, пока два числа не будут одинаковыми. Ниже приведено итеративное решение.
int a= 153 , b = 81, gcd = 1;
while( gcd != a ) {
if( a > b ) a -= b;
else if( b > a) b -= a;
else gcd = a;
}
System.out.println(gcd);
Это рекурсивное решение. Надеюсь, это поможет.
public static int euclidGCD(int a, int b) {
if (b == a) return a;
if (b > a) return euclidGCD(b - a, a);
else return euclidGCD(a - b, b);
}
Вот модификация вашей программы. Чтобы протестировать программу, лучше всего записать ее условия и случаи. В этом упражнении есть два условия:
- 1.) Число должно быть целым числом
- 2.) Число должно быть положительным.
Работа с числами обычно имеет дискретное количество случаев. В этом упражнении есть два случая:
- 1.) Числа равны.
- 2.) Номера разные.
Ваш код неверен, когда a равно b (попробуйте сами). Когда цифры разные, ваш код работает нормально. Ниже приведена модификация.
int a= 55;
int b= 55;
boolean flag = true;
int gcd = b;
while(flag && b != a)
{
if(a>b && a%b ==0)
{
flag = false;
gcd = b;
}
else if(b>a && b%a ==0)
{
flag=false;
gcd = a;
}
else if( a>b)
a = a-b;
else
b = b-a;
}
System.out.println(gcd);