View Full Version : Need help with using GMP BigNum Library
FilledVoid
19-03-2008, 01:26 AM
Hi all,
I have been working on Project Euler questions and I'm trying to understand how to use this GMP Bignum library and I've read through a bit of the documentation but this is way way more complex than what I expected lol. I'd appreciate if soeone could either post a few SIMPLE examples using it. If you could attach the code, that woulds be great. Please dont post the ones in the demo folder of the gmp library cause I can barely understand them at all lol.
Thanks
QwertyManiac
19-03-2008, 05:41 PM
Here's a simple code which adds and subtracts 2 integers among 3:
#include <gmp.h>
int main(void)
{
// We declare a few BigNum Integer
mpz_t I, K, M;
// Some BigNum Floats (Not gonna use them)
// Just demo
mpf_t U,J,N;
int n;
// Initialize the Integer I as 0
// set a value for the rest two (K and M)
// We need to initialize ANY BigNum value
// Its a must
mpz_init(I); // Initialized with 0
mpz_init(K);
mpz_set_si(K, -3000000);
// si means Signed Integer
// set_* is used to set values
mpz_init_set_ui(M, 999999999);
// Initialized and set via Unsigned at a time
// Similarly one can convert via Double, Strings, etc
// and even set via other mpz_t values
// Also use xxx_clear() to clear
// Add M, K and store in I
mpz_add(I,M,K);
// Subtraction, another example
mpz_sub(M,K,I);
gmp_printf("I = %Zd, K = %Zd, M = %Zd \n", I, K, M);
// Refer the manual for other _functions_ relating to integers
return 0;
}
/*
Note on GMP in general
There are 3 basic types of Numbers in GMP
Integer - Represented as "Z"
Float - Represented as "F"
Rational - Represented as "Q"
There are some more types, such as Limbs and so,
but I don't know much about them.
So in gmp_printf(), the strings obviously are:
%Z<format> for Integer
%F<format> for Float
%Q<format> for Rational
Where <format> can be any C-allowed printf() type such as:
d - Integer
f - Float
x - Hex
gmp_scanf()'s the same
P.s. Heard that stuff for O/P and I/P are easier in C++ but,
I prefer C
*/
See it in some editor which highlights comments out at least.
Sykora
19-03-2008, 05:49 PM
Are you sure you checked the manual? It seemed pretty simple to me. Just read the part on initialization, then all the arithmetic functions, then the I/O. That should be all you need.
ChaiTan3
19-03-2008, 05:52 PM
Even I had decided to use BigNum library for some of ProjectEuler's problems. But due to its complexity, learning python turned out to be a simpler option(learning loops and functions hardly takes 10 min)
FilledVoid
19-03-2008, 07:14 PM
QwertM : Thank you for the guidance :) That explains alot.
Are you sure you checked the manual? It seemed pretty simple to me. Just read the part on initialization, then all the arithmetic functions, then the I/O. That should be all you need.
Hmm Maybe Im looking at the wrng manual then. But I felt that it was way too complex :| .
Even I had decided to use BigNum library for some of ProjectEuler's problems. But due to its complexity, learning python turned out to be a simpler option(learning loops and functions hardly takes 10 min)
yeah I've beent empted to change to Python but I'd like to make sure I atleast try in C befoer I give up.
QwertyManiac
20-03-2008, 05:55 AM
This is the right manual:
http://gmplib.org/manual/index.html
FilledVoid
20-03-2008, 01:20 PM
This is the right manual:
http://gmplib.org/manual/index.html
Thank you
Sykora
20-03-2008, 06:38 PM
The entire python standard library _is_ written in C. So if you maximize your usage of builtins, you'll be able to get C's speed, and write in python, which is heavenly.
vBulletin® v3.7.0, Copyright ©2000-2008, Jelsoft Enterprises Ltd.