1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| #include<stdio.h>
#include<stdlib.h>
void Euclide(int a, int b, int *ui, int *vi,int *m){
int uj=0, vj=1,tmpu,tmpv,n, r,q;
n=a;
*m=b;
while(r!=0){
r=n%*m;
q=n/(*m);
if(r!=0){
n=*m;
*m=r;// si r=0 m=pgcd
}
tmpu=uj;
tmpv=vj;
uj=*ui-q*uj;
vj=*vi-q*vj;
*ui=tmpu; // si r=0 ui= coeff de bezout
*vi=tmpv;
}
}
void CRT(int n, int x, int *N, int *X) {
int u,v,osef;
Euclide(n,N,&u,&v,&osef);
X=(u)*(n)*(*X)+(v)*(*N)*(x);
N=*N*n;
X=*X%*N;
}
int main() {
int i,j,N,X;
int n[5], x[5];
for(i=0;i<5;i++){
printf("Entrer l'entier %d \n", i);
scanf("%d", &n[i]);
printf("Entrer le modulo %d \n", i);
scanf("%d", &x[i]);
}
N=n[0];
X=x[0];
for(j=1;j<5;j++){
CRT(n[j],x[j],&N,&X);
}
printf("Le résultat est : %d \n", X);
return 0;
} |
Partager