Este es el enunciado del problema numero 6 del Project Euler:
The sum of the squares of the first ten natural numbers is,2 + 22 + … + 102 = 385The square of the sum of the first ten natural numbers is,(1 + 2 + … + 10)2 = 552 = 3025Hence the difference between the sum of the squares of the first ten natural numbers and the square of the sum is 3025385 = 2640.Find the difference between the sum of the squares of the first one hundred natural numbers and the square of the sum.
El problema es acerca de hallar la sumatoria de los números naturales del 1 hasta el 100 y el total elevarlo al cuadrado, mientras, que se halla la sumatoria de los cuadrados de los números naturales del 1 hasta el 100 obteniendo un segundo total para el final restar ambos totales.
Primero : hallar la sumatoria de los numero naturales y elevarlo al cuadrado
(1 + 2 + 3 +…. +99 + 100)^2
Segundo: Hallar la sumatoria del cuadrado de los numeros naturales.
1^2 + 2^2 + … + 100^2
En C/ C++ utilizando fuerza bruta:
#include <stdio.h> #include <string.h> #include <conio.h> #include <stdlib.h> #include <math.h>El problema es acerca de hallar la sumatoria de los números naturales del 1 hasta el 100 y el total elevarlo al cuadrado, mientras, que se halla la sumatoria de los cuadrados de los números naturales del 1 hasta el 100 obteniendo un segundo total para el final restar ambos totales. Primero : hallar la sumatoria de los numero naturales y elevarlo al cuadrado (1 + 2 + 3 +…. +99 + 100)^2 Segundo: Hallar la sumatoria del cuadrado de los numeros naturales. 1^2 + 2^2 + … + 100^2 En C/ C++ utilizando fuerza bruta: Al final el resultado total para los primeros 100 numeros naturales es: 25164150.void main (){ int suma_cuadrados =0; int suma_numeros=0; // Siendo n la variable que contendra el valor hasta donde queramos que llegue la sumatoria int n=100; for(int i = 1 ; i <= n ; i++){ suma_cuadrados += (i*i); // la sumatoria de los numeros naturales suma_numeros += i; }// fin de for // En la siguiente linea se ejecuta la diferencia int resultado = ( suma_numeros * suma_numeros ) - sumacuadrados; printf(” %d “, resultado); }//main
// siendo lim el numero hasta donde queremos que llegue la sumatoria // por la tanto puede ser sustituido por cualquier numero que deseemos int lim= 100; int sum= ( lim * (lim + 1) ) / 2; // sumatoria de numeros int sum_s= ( ( 2*lim +1) * (lim +1) * lim )/ 6; // sumatoria de cuadrados // En la siguiente variable se hace guarda el resultado de la resta. int resultado = ( sum * sum ) - sum_s ; // se imprime por pantalla el resultado printf(” %d “, resultado);El algoritmo tan solo esta limitado por el numero que se ingrese, mientras mas grande sea es mejor cambia por otro tipo de dato como por ejemplo: long int, double, longt double etc… Hasta el momento este ha sido el algoritmo mas optimo que he logrado investigar, si tienes mas optimo o quieres compartir tu opinion tan solo escribe.
No hay comentarios:
Publicar un comentario