Questa è la consegna dell'esercizio:
In matematica, un’equazione diofantea lineare in due incognite è una equazione con coefficienti interi, ovvero ax + by = c, con a e b non entrambi nulli, di cui si ricercano le soluzioni intere. È possibile dare un semplice criterio di risolubilità: l’equazione diofantea ha soluzioni intere se e solo se c è divisibile per il massimo comun divisore di a e b.
La funzione prende come input i tre parametri a, b e c dell’equazione diofantea ax + by = c e ritorna 1 se l’equazione ammette soluzioni, 0 altrimenti. Nel caso in cui a e b siano entrambi nulli, la funzione ritorna 1 se c =0, 0 altrimenti. Ricordo che il massimo comune divisore di due numeri interi a e b, che non siano entrambi uguali a zero, è il più grande numero naturale di cui sia a sia b sono multipli. Per questa definizione, MCD(a,b)=MCD(|a|,|b|).
Il mio codice è il seguente:
main:
extern int ammette_soluzioni(int a, int b, int c);
int main(){
int a = 5;
int b = 2;
int c = 3;
int ris = ammette_soluzioni(a, b, c);
return 0;
}
il mio file.c è questo:
#include <math.h>
int ammette_soluzioni(int a, int b, int c){
if (a == 0 && b == 0 ){
if (c == 0){
return 1;
}
else
return 0;
}
unsigned int m, n;
m = abs(a);
n = abs(b);
unsigned int t, mcd;
while (m != n){
if (m < n){
t = m;
m = n;
n = t;
}
m = m - n;
}
mcd = m;
if (mcd % c == 0){
return 1;
}
if (c % mcd == 0){
return 1;
}
return 0;
}
in alcuni va bene questo programma, però non capisco perchè diventa un ciclo continuo, cioè non funziona se gli passo dal main b == 0..
qualucuno ha capito perchè?