Если a и b взаимно просты (gcd = 1), ваш алгоритм завершится только после того, как я переполнится и достигну -1. т.е. после 4 миллиардов итераций.
И даже если это не тот случай, ваш алгоритм медленный (линейный в gcd (a, b)). Вы должны взглянуть на евклидов алгоритм , который намного быстрее.
Ваш код в переписанном виде (проблема с завершением не устранена), поэтому он эквивалентен вашему старому коду:
int check (int a, int b)
{
int i = 2; //every number is divisible by 1
while(!((a % i == 0) && (b%i == 0)))//i must be divisible by both numbers
{
i++;
}
return i;
}
Переписано в цикл for, который завершается, когда становится ясно, что gcd == 1
int check (int a, int b)
{
for(int i=2;i<=Math.Min(a,b);i++)
{
if((a % i == 0) && (b%i == 0))
return i;
}
return 1;
}