//----------------------------------------------------------------- // 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