3

Could someone please point out a site where I can find an algorithm to efficiently calculate integer exponentiation to large powers using C#?

eg. I want to calculate 2^60000 or 3^12345

Hugo
  • 140
  • 2
  • 7

3 Answers3

13

Unless this is homework, you probably don't want to roll your own implementation of arbitrary precision exponentiation. Calculating large exponents of the type you describe is complicated - performance aside.

I would recommend using one of the existing arbitrary precision arithmetic libraries, like GMP - most of which have libraries to access them from C#.

F# has support for arbitrary precision arithmetic using the BigInt class (which you can also access from C# if you import the assembly it's in). However, I don't know how optimized BigInt exponentiation is.

If you're simply trying to learn about efficient algorithms for exponentiation, you may want to look into the Square-And-Multiply algorithm for exponentiation.

LBushkin
  • 129,300
  • 32
  • 216
  • 265
2

Integer exponentiation can effectively be calculated using a method known as "Exponentiation by squaring" link.

This method can also be used to calculate the modular exponentiation link, which is used in some asymmetric encryption methods like RSA.

midtiby
  • 14,550
  • 6
  • 34
  • 43
0

Check this out: IntX for working with LARGE integers. You might have to write your own implementation of power, but since multiplication is supported, this should not be so hard.

Edit by 280Z28: Another implementation which includes fast Pow, ModPow, and primality testing is this BigInteger implementation (Code Project), which I've used on Project Euler problems in the past - though I now work with .NET 4.0 and use its System.Numerics.BigInteger implementation.

Sam Harwell
  • 97,721
  • 20
  • 209
  • 280
Manu
  • 28,753
  • 28
  • 75
  • 83
  • I would advise using a more mature library than IntX if the results of the computations are at all important. Writing a correct library for arbitrary precision is harder than it looks - and many of the smaller projects out there have not yet had an opportunity to detect and resolve the types of problems that plague most implementations. – LBushkin Oct 27 '09 at 15:02