ProgIng - Programación en Ingeniería
Loading...
Searching...
No Matches
Ejemplo007.c File Reference

Cálculo del entero i tal que 1+3+5+...+(2i-1) >= n (relación con sqrt(n)). More...

#include <stdio.h>
Include dependency graph for Ejemplo007.c:

Go to the source code of this file.

Functions

int main (int argc, char *argv[])
 Punto de entrada. Calcula i restando impares consecutivos.

Detailed Description

Cálculo del entero i tal que 1+3+5+...+(2i-1) >= n (relación con sqrt(n)).

El programa usa la identidad: 1 + 3 + 5 + ... + (2i-1) = i^2

Restando números impares consecutivos a rn (inicialmente rn=n), el contador i se incrementa hasta que rn <= 0.

Interpretación:

  • Si n es un cuadrado perfecto (n = m^2), entonces al final i = m y rn llega a 0.
  • Si n NO es cuadrado perfecto, el algoritmo termina con i = ceil(sqrt(n)).
Entrada
Un entero n > 0.
Salida
Imprime una línea con el formato:
i^2 = n
Warning
El texto impreso sugiere igualdad exacta, pero si n no es cuadrado perfecto, i^2 != n. El valor i corresponde a ceil(sqrt(n)).
Complejidad
Tiempo: O(sqrt(n)). Memoria: O(1).

Definition in file Ejemplo007.c.

Function Documentation

◆ main()

int main ( int argc,
char * argv[] )

Punto de entrada. Calcula i restando impares consecutivos.

Parameters
argcNo usado.
argvNo usado.
Returns
0 si finaliza correctamente.

Definition at line 41 of file Ejemplo007.c.

42{
43 (void)argc;
44 (void)argv;
45
46 int n; /* número de entrada */
47 int rn; /* “residuo” que se va reduciendo restando impares */
48 int i; /* contador de impares restados */
49
50 /* Validar que n sea positivo */
51 do {
52 printf("Ingrese el valor de n: ");
53 scanf("%d", &n);
54 } while (n <= 0);
55
56 rn = n;
57 i = 0;
58
59 /*
60 En cada iteración se resta el siguiente impar:
61 1, 3, 5, 7, ... que corresponde a (2*i+1) cuando i inicia en 0.
62 Después de k iteraciones:
63 rn = n - (1+3+...+(2k-1)) = n - k^2
64 */
65 while (rn > 0)
66 {
67 rn -= (2*i + 1); /* resta impar actual */
68 i++; /* incrementa contador */
69 }
70
71 /* Nota: i será sqrt(n) si n es cuadrado perfecto; si no, i = ceil(sqrt(n)) */
72 printf("%d^2 = %d\n", i, n);
73
74 return 0;
75}