Pregunta

He estado jugando con algunos problemas Project Euler y, naturalmente, me encuentro con muchos que requieren el manejo de números de tipo más grandes que long long . Estoy comprometido a usar Cocoa y Objective-C (necesito estar atento para trabajar) pero no puedo encontrar una manera elegante (léase: biblioteca) para manejar estos números realmente grandes.

Me encantaría usar GMP, pero parece que usarlo con Xcode es un mundo de dolor completo.

¿Alguien sabe de alguna otra opción?

¿Fue útil?

Solución

Si fuera usted, compilaría gmp fuera de XCode y usaría solo gmp.h y libgmp.a (o libgmp.dylib) en mi proyecto XCode.

Otros consejos

Intente almacenar los dígitos en matrices.

Aunque tendrás que escribir algunas funciones nuevas para todos tus problemas aritméticos, así es como nos dijeron que lo hiciéramos en la universidad.

Además, la velocidad de los cálculos mejoró bastante, ya que los números grandes no eran realmente grandes después de todo y no eran números realmente completos

vea si ayuda

saludos

vBigNum en vecLib implementa enteros de 1024 bits (con o sin signo). ¿Es lo suficientemente grande?

Si quisiera usar matlab (o algo parecido), podría ver mi implementación de una forma entera grande (vpi) en el intercambio de archivos.

Es bastante simple. Almacene cada dígito por separado. Las sumas y restas son simples, solo implemente una operación de acarreo. Las multiplicaciones se hacen mejor usando convolución, luego un carry. Implemente operadores de división y modificación, luego una operación powermod, útil para muchos de los problemas de PE. Las potencias son fáciles: solo cuadraturas y multiplicaciones repetidas, basadas en la representación binaria del exponente.

Esto te permitirá resolver muchos problemas de PE.

También tuve la brillante idea de intentar algunos problemas del Proyecto Euler con Cocoa / Objective-C y lo encontré frustrante. Anteriormente utilicé Java y quizás algo de PHP. Publiqué mi problema exacto en este hilo.

Siempre consideré usar una biblioteca haciendo trampa para este proyecto. Simplemente escribe una clase con las cosas que necesitas. Y no tenga miedo de usar malloc y uint64_t, etc. NSNumber es no una buena idea en muchos casos.

Por otro lado, hay muchos problemas en los que la solución obvia requeriría números enormes a enormemente enormes, y el truco es encontrar una manera de resolver el problema sin usar estos números enormes. (Por ejemplo, ¿cuál es la suma de los últimos mil dígitos de 1,000,000 factorial)?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top