2 votos

Proyecto Euler's, Problema n. ° 565

Proyecto de Euler, el Problema nº 565 estados:

Deje $\sigma(n)$ ser la suma de los divisores de a $n$. E. g. los divisores de $4$$1, 2$$4$, lo $\sigma(4)=7$.

Los números de $n$ que no exceda $20$ tal que $7$ divide $\sigma(n)$ son: $4, 12, 13$$20$, la suma de estos números se $49$.

Deje $S(n, d)$ la suma de los números de $i$ que no exceda $n$ tal que $d$ divide $\sigma(i)$.

Por lo $S(20, 7)=49$.

Se le da: $S(10^6, 2017)=150850429$ $S(10^9, 2017)=249652238344557$

Encontrar $S(10^{11}, 2017)$

He escrito un programa en Java que se encuentra la solución a $S(20, 7)$ sobre $0.001$ segundos en mi equipo. El mismo programa tarda un poco más de $7$ segundos para encontrar la solución a $S(10^6, 2017)$. Sin embargo, aparentemente tarda una eternidad para ejecutar $S(10^9, 2017)$. No me he molestado tratando de encontrar la $S(10^{11}, 2017)$ hasta que se me puede venir para arriba con una manera mucho más eficiente.

Dado que estos son problemas matemáticos destinados a ser resuelto por un equipo, tengo que encontrar y explotar algo de matemáticas para mejorar notablemente el tiempo de ejecución de mi programa.

Una de las primeras cosas que me llamó la atención cuando vi a este problema es que he utilizado el divisor de la función y su multiplicativo de la propiedad antes de venir para arriba con un estilo elegante y muy eficiente método para resolver un Proyecto anterior de Euler programa. Así que, hice una referencia a la función de divisor artículo de wiki, una vez más, para encontrar algo que me ayudara, pero no entiendo lo suficiente de las matemáticas para beneficiarse de ella.

También he utilizado un conocido algoritmo que se enseña en la mayoría de Introducción a los cursos de informática con el fin de buscar de forma eficiente los divisores de cada uno de los $n$ y se suman a ellos.

El pseudocódigo del algoritmo que se utiliza es la siguiente:

1. Input an integer n
2. Set a variable named sum equal to 0
3. Set a variable named limit to be the sqrt(n)
3. Run a loop from i = 1 to  i <= limit
       if n is divisible by i, then add i to sum 
           if i does not equal (n / i), then add (n / i) to sum
4. Return the sum

En la medida de mis conocimientos, este algoritmo es el más rápido que hay para encontrar los divisores de los números enteros. He utilizado este algoritmo para implementar la suma de los divisores de la función en mi programa.

La siguiente parte es lo que sospecho que está haciendo el mi código de manera ineficiente. Sigue el $S(n, d)$ función de que el Proyecto de Euler se describe. Aquí está el pseudocódigo para la implementación de mi $S(n, d)$:

1. Input an integer n 
2. Input an integer d
3. Set a variable named sumNums equal to 0
4. Run a loop from i = 1 to i <= n
       if d divides sumOfDivisors(i), then add i to sumNums
5. Return sumNums

Por lo tanto, mi pregunta es, ¿qué hecho matemático(s) y/o teoremas puedo utilizar para hacer mi programa de encontrar la solución rápidamente?

0voto

Stephan Aßmus Puntos 16

más reciente que he notado en MSE Meta: Proyecto de Euler, de nuevo De septiembre de 2015

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Artículo de la revista por James Sommers :

http://www.theatlantic.com/technology/archive/2011/06/how-i-failed-failed-and-finally-succeeded-at-learning-how-to-code/239855/

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

la discusión sobre MO:

http://tea.mathoverflow.net/discussion/1226/project-euler-questions/

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

discusión en el Proyecto de Euler propio foro:

http://forum.projecteuler.net/viewtopic.php?f=5&t=2707

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

carta de correo electrónico de "hk", el mes de noviembre de 2011

Hola Voluntad,

permítanme presentarme a usted. Estoy de hong kong en el Proyecto de Euler. La filosofía de Colin Hughes, el fundador del Proyecto Euler era la filosofía de la inductivos de auto aprendizaje. Solo Googlear sobre el tema revelan mucho acerca de esta materia educativa. (El elemento superior en mi versión de Google fue este: http://mate.calpoly.edu/media/files/Review_inductive_learning.pdf)

Mi opinión personal sobre este tema es: si te falta actitud, cuando se enfrentan a un nuevo problema, que se descomponen en partes más pequeñas o para investigar los casos más pequeños que nunca jamás se convertirá en un éxito científico o académico educados en persona. El problema en cuestión que planteó atención al Proyecto de Euler es particularmente adecuado para la escala de abajo y descubrir algunos datos útiles.

Creo que estamos frente a un choque cultural aquí: El rationalisations nos muestra, por ejemplo, por rbharvs son desde el nivel: tengo que decirle como hacer las cosas. Me temo que tiene que ver con un fracaso del sistema educativo que muestra a los alumnos las reglas y fórmulas sin que se les da el espacio suficiente para experimento antes de la formalización del conocimiento.

Para hacer un trabajo que es nuevo para usted, sea de investigación en matemáticas o jugando un poco con los problemas para que todas las matemáticas se conoce, se le necesidad de doodle todo el problema, o partes de él. ¿De qué otra manera se puede hacer esencialmente el nuevo trabajo? De arriba hacia abajo de la enseñanza que no ayuda a sus estudiantes a desarrollar este tipo de capacidad que produce la gente que empieza a gritar: dime cómo hacerlo y voy a tratar de copiarlo. Algunas personas que están muy mal educados en la forma que he descrito son sólo mediante el uso de Project Euler para desarrollar esas habilidades. Espero que ellos se benefician de que en su vida profesional. Algunos incluso han indicado que fue el Proyecto de Euler, que en última instancia les hizo tomar la decisión de elegir las matemáticas para su estudio académico, a pesar de la pobre nivel de la enseñanza de las matemáticas en su país.

Las personas que se plantean las preguntas de Matemáticas de Desbordamiento, en mi opinión han demostrado que carecen de la actitud mental para hacer lo que sea necesario garabateando. (Por ejemplo, el hecho de que uno de ellos copia de la radio de 10^10. Algunos experimentos habría demostrado que ______).

Así, se puede considerar que esta comunicación privada como almuerzo hablar si no te interesa, pero espero que me dio un poco de información sobre la filosofía del Proyecto Euler. Siéntase libre de parafrasear a tu deseo, cuando se comunica con sus colegas en Matemáticas de Desbordamiento. Si quieres saber más siéntase libre de enviarme un correo electrónico.

Gracias de nuevo por el esfuerzo que han invertido en el caso.

Saludos

hk

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X