Logo elrincondelc.com
curso de programación en c
Foros de programación en C
Inicio :: Código fuente

Valoración
1

Resolucion de congruencias

codigo enviada por: michaela
Este es el algoritmo de Euclides extendido(resolucion de congruencias), el programa trae un menu para poder escoger de dos resoluciones que son:
x ?b mod n
ax?b mod n
NOTA: escrito en DEV c++.
#include<stdio.h>
#include<conio.h>
int menu(void);
int euclides(int x,int y);
int sa,tb;
main(){
       int op,s,t;
       int a,b,m,cociente,resultado,mcd;
       do{
          op=menu();
          switch(op){
             case 1:
                  printf("Introduce el valor de a:n");
                  scanf("%d",&a);
                  printf("Introduce el valor de b:n");
                  scanf("%d",&b);
                  printf("Introduce el valor del modulo:n");
                  scanf("%d",&m);
                  mcd=euclides(a,m);
                  if(b%mcd) printf("No existen soluciones para esta congruencian");
                  else{
                       cociente=b/mcd;
                       s=sa*cociente;
                       t=tb*cociente;
                       printf("La combinacion lineal es:n");
                       printf("%d= %d(%d)+%d(%d)n",mcd,a,sa,m,tb);
                       printf("%d= %d(%d)+%d(%d)n",mcd*cociente,a,s,m,t);
                       printf("nLas soluciones de la congruencias son:");
                       printf("nx=%d(k)+%d  (k en Z)n",m,s);
                  }
                  break;
             case 2:
                  printf("Introduce el valor de b:n");
                  scanf("%d",&b);
                  printf("Introduce el valor del modulo:n");
                  scanf("%d",&m);
                  resultado=b%m;
                  printf("El resultado es:n x=%d",resultado);
                  break;
          }
       if(op<1||op>3) printf("Opcion incorrecta!n");
       }while(op!=3);
}

int menu(void){
    int op;
    printf("ntMENU DE CONGRUENCIASn");
    printf("t1.-ax=b mod nn");
    printf("t2.-x=b mod nn");
    printf("t3.-Salirn");
    scanf("%d",&op);
    return (op);
}
int euclides(int x,int y){
     int residuo=1,cociente,temp1,temp2;
     int s=1,s1=0,t=0,t1=1,a,b;
     temp1=x;
     temp2=y;
     while(residuo!=0){
          cociente=x/y;
          residuo=x%y;
          if(residuo<0){
             if(cociente<0) cociente-=1;
             if(cociente>=0)cociente+=1;
             residuo=x-(y*cociente);
          }
          a=s-cociente*s1;
          b=t-cociente*t1;
          printf("%d = (%d)X(%d) + %dn",x,y,cociente,residuo);
          x=y;
          y=residuo;
          s=s1;
          s1=a;
          t=t1;
          t1=b;
     }
     if(x<0) x=-x;
     sa=s;
     tb=t;
     return x;
}

Para enviar comentarios debes estar registrado.

(c) ElRincondelC.com

Un proyecto de Urlan Heat : proyectos de Internet y soporte para el comercio electrónico.