//-----------------------------------------------------------------
// 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");
}
viernes, 1 de octubre de 2021
El algoritmo 3n+1. Conjetura de Collatz. Un ejercicio de programación en C/C++
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario