Este codigo ademas de calcular el MCD puede determinar si un numero es primo o no, y cosas relacionadas Es una aplicacion de consola,
Descarge el codigo fuente aqui.
Descarga el archivo ejecutable aqui (usuarios windows)
NOTA para cuando calcule el MCD los numeros apareceran al reves es decir que los divisores aparecen a las izquierda y los numeros a la derecha
es posible que algunos procesadores no puedan ejecutar este programa, entonces usted puede compilarlo manualmente con su compilador favorito
Nota: Esto ha sido codificado en el Dev-C++
#include <stdio.h>
//Si no se incluye <stdbool.h>, no podra usar los datos bool
#include <stdbool.h>
//este metodo solo retorna true o false, a este metodo llega como argumento el numero a probar
bool es_primo(int num){
//si se trata del 1 al 3 es primo
if(num==1 || num==2 || num==3) return true;
//sino, verificamos que el numero sea distinto de cero, y mayor que cero
if(num && num>0)
{
if(num%2==0) return false;
int i;
//recorremos del 2 hasta un numero antes del numero a probar
for(i=3;i<num;i++){
/*
Si el residuo de num / i == 0
entonces el numero es divisible por otro numero, lo cual rompe
la regla de los numeros primos.
Retornamos false inmediatamente
*/
if(num%i==0) return false;
i++;
}
//si en el recorrido no retorno false, es numero primo
return true;
}
//si num=0 o num<0 el numero tampoco es primo
else return false;
}
//Funcion para imprimir el Minimo Comun multiplo
int getDivisor(int num) {
//si numero>1, es un error matematico
if(num<1) return 0;
//sino, si es 1, 2 retornamos el numero
else if(num==1 || num==2) return num;
else
{
//si 2 es divisor de num retornamos 2
if(num%2==0) return 2;
int i;
//recorremos con un fot, hasta la mitad num, y avanzamos de 2 en 2
for(i=3;i<(num/2)+1;i++) {
//si es divisor i de num, lo retornamos
if(num%i==0) return i;
i++;
}
//si al final no tenia divisor, retornamos num
return num;
}
}
void opcion1(){
printf("Ingrese la cantidad de numeros a probar: ");
int cant,num,i,cantPrimos=0;
scanf("%i",&cant);
for(i=1;i<=cant;i++) {
printf("Ingrese numero: ");
scanf("%i",&num);
if(es_primo(num)) {
printf("%i es un numero primo\n",num);
cantPrimos++;
}
else printf("%i no es un numero primo\n",num);
}
if(cantPrimos) printf("%i numeros eran primos\n",cantPrimos);
}
void opcion2() {
printf("\nNo somos responsables de lo que pueda pasar si ingresa un rango muy grande\nIngrese el rango de numeros a imprimir\nDesde: ");
int desde,hasta;
scanf("%i",&desde);
printf("Hasta: ");
scanf("%i",&hasta);
int i,cant=0;
for(i=desde;i<=hasta;i++) {
if(es_primo(i)) {
printf("%i\n",i);
cant++;
}
}
printf("Rango: %i - %i\tHay %i numeros primos",desde,hasta,cant);
}
void opcion3() {
printf("\nIngrese el rango de numeros a imprimir\nDesde: ");
int desde,hasta;
scanf("%i",&desde);
printf("Hasta: ");
scanf("%i",&hasta);
int i,cant=0;
for(i=desde;i<=hasta;i++) {
if(es_primo(i)) cant++;
}
printf("Rango: %i - %i\tHay %i numeros primos",desde,hasta,cant);
}
void opcion4(){
printf("Se va a calcular el MDC de cuantos numeros?: ");
int cant,num,i;
scanf("%i",&cant);
for(i=1;i<=cant;i++) {
printf("Ingrese numero: ");
scanf("%i",&num);
//Obtenemos el divisor del numero ingresado, y lo guardamos en aux
int aux=getDivisor(num);
//si numero < 1 es un error matematico
if(!aux) printf("Error matematico\n");
//Si se trata de 1, lo imprimiimos y no entramos en el while
else if(num==1) printf("1\n");
else {
//hasta que aux sea cero
while(aux) {
//si es 1, lo imprimimos
if(aux==1) {
printf("\t1");
//con esto terminamos el while
aux=0;
}
//Si el divisor del numeros no es el mismo
else if(aux!=num) {
printf("%i\t%i\n",aux,num);
/*
Ahora actualizamos num, num lo dividimos entre su divisor,
y nuevamente actualizamos aux, con el divisor de num.
*/
num=(num/aux);
aux=getDivisor(num);
}
else {
//Cuando el divisor (axu) es el mismo num, finalizamos el while
printf("%i\t%i\n\t1\n",aux,num);
aux=0;
}
}
}
}
}
int main(){
printf("Este programa puede:");
int opcion;
while(opcion) {
printf("\n1.Determinar si un numero es primo o no\n2.Imprimir los numeros primos desde y hasta donde lo indique\n3.Determinar cuandos numeros primos hay en un rango\n4.Calcular el MCD de un numero\n0.Salir del programa\nPresione la opcion que desea: ");
scanf("%i",&opcion);
if(opcion==1) opcion1();
else if(opcion==2) opcion2();
else if(opcion==3) opcion3();
else if(opcion==4) opcion4();
else if(opcion) printf("Error: opcion incorrecta\n");
}
printf("\n");
system("pause");
return 0;
}
No hay comentarios:
Publicar un comentario