viernes, 1 de octubre de 2021

El algoritmo 3n+1. Conjetura de Collatz. Un ejercicio de programación en C/C++

//-----------------------------------------------------------------
// CICLE d'un nombre enter. L'algoritme 3n+1  
// 
// Joan Aranès Clua
// data: 17/12/2001
// 
// Aquest programa calcula el "cicle" d'un nombre n
// el qual es calcula de la manera següent:
// 1. s'entra n 
// 2. es mostra n 
// 3. si n =1 
// 4.   aleshores ACABA EL PROGRAMA  
// 5. si n es senar aleshores n:=3n+1 
// 6. en cas contrari, és a dir, si n és parell, aleshores n:=n/2 
// 7. tornar a la línia 2 
//---------------------------------------------------------------------
// exemple 1. cicle(22) = {22, 11, 34, 17, 52, 26, 13, 
                          40, 20, 10, 5, 16, 8, 4, 2, 1}
// es tracta d'un cicle de longitud 16
// --------------------------------------------------------------------
// EXEMPLES AMB POTÈNCIES DE ^2: 2^x
// exemple 2. cicle(32) = {32, 16, 8, 4, 2, 1}
// exemple 3. cicle(64) = {64, 32, 16, 8, 4, 2, 1}
// ...
// exemple 4. cicle(1024) = {1025, 512, 256, 128, 
                            64, 32, 16, 8, 4, 2, 1}
// ...
//    Cal observar que:
//		1r Efectivament, les longituds dels cicles de les potències de 2 
           són relativament curtes
//      2n longitud_del_cicle(2^x) = x+1
//-----------------------------------------------------------------

#include <stdio.h>          //printf i scanf
#include <stdlib.h>         //system() .. per a la f. cls

void main()
{

    int n;  // variable corresponent a la dada d'entrada
    int m;  // variable auxiliar
	int longitud; // variable per mesurar la longitud del cicle

    system("cls"); //esborra la pantalla

	// entrada dels coeficients
	printf("\nintrodu\x08Bu un nombre enter:\n");
    printf("n=");
	scanf("%d",&n);
	printf("\ncicle(%d)=",n);

	m=n;
	longitud=1;
	while (m>1)
	{
		printf("%d ",m);
		if ((m%2)!=0) 
			m=3*m+1;
		else 
			m=m/2;
		longitud=longitud+1;
		
    }
	printf("%d ",m);
		
	printf("\nlongitud del cicle(%d)=%d",n,longitud);
	printf("\n\n");
} 

No hay comentarios:

Publicar un comentario