Project Euler Problem #29!

March 23rd, 2009
by Serinox

Problem #29 says:

Consider all integer combination's of a^(b) for 2 ≤ a ≤ 5 and 2 ≤ b ≤ 5:

    2^(2)=4, 2^(3)=8, 2^(4)=16, 2^(5)=32
    3^(2)=9, 3^(3)=27, 3^(4)=81, 3^(5)=243
    4^(2)=16, 4^(3)=64, 4^(4)=256, 4^(5)=1024
    5^(2)=25, 5^(3)=125, 5^(4)=625, 5^(5)=3125

If they are then placed in numerical order, with any repeats removed,
 we get the following sequence of 15 distinct terms:

4, 8, 9, 16, 25, 27, 32, 64, 81, 125, 243, 256, 625, 1024, 3125

How many distinct terms are in the sequence generated
by a^(b) for 2 ≤ a ≤ 100 and 2 ≤ b ≤ 100?

Very simple generate and count. Solution in c#/mono. No nifty tricks needed to make it work better, runs in a second or less.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
namespace ProjectEuler
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
            sw.Start();
            int a = 2;
            int b = 2;
            ArrayList DistinctTerms = new ArrayList();
            while (a <= 100)
            {
                while (b <= 100)
                {
                    if (DistinctTerms.Contains(Math.Pow(a,b)) == false)
                    {
                        DistinctTerms.Add(Math.Pow(a, b));
                    }
                    b++;
                }
                b = 2;
                a++;
            }

            Console.WriteLine(DistinctTerms.Count);
            sw.Stop();
            Console.WriteLine(sw.Elapsed.ToString());
            Console.ReadLine();
        }
    }
}

Posted in Project Euler | Comments (1)

One Response to “Project Euler Problem #29!”

  1. rpaschelke Says:

    I did something similar to this in javascript – but instead of storing the power values, i stored the logarithms of the values. Javascript does not have native support for large integers. Then by putting the log values in and array and sorting it, I could easily find duplicates by locating differences of zero (or very small values) in adjacent elements and counting them. The difference between the length of the array and the duplicate count gives the answer.

    Elapsed time on my machine for the problem at size 100 is 56 milliseconds!

    My routine will run up to a maximum value of 447 before running out of memory. And it takes a total of 1 minute, 46 seconds to do that.

    The array load time: 685 ms
    array sort: 1 minute, 23 seconds
    Find dupes : 22 seconds

    For fun, I ran different values

Leave a Reply

You must be logged in to post a comment.