Euler Problems
Zacharia M. Rugongo
z.mwangi at yahoo.com
Sat Jul 12 15:16:08 BST 2008
My solution to Euler #12 runs in less than 1 minute.
Let us list the factors of the first eight triangle numbers:
1: 1
3: 1,3
6: 1,2,3,6
10: 1,2,5,10
15: 1,3,5,15
21: 1,3,7,21
28: 1,2,4,7,14,28
36: 1,2,3,4,6,8,9,12,18,36
Note the numbers that are underlined in each sequence. This is the half way point.
a) If you divide the triangle number by the first number that is underlined the result will be greater than the divisor.
b)
On the other hand if you divide the triangle number by the second
number that is underlined the result will be less than the divisor.
c)
The triangle number 36 has only one number at the centre of the
sequence, because that centre number is the square root of the triangle
number 36.
In
cases a) and b) if you wanted to know the total number of divisors, you
look for the position of the number underlined as described in b), then
subtract 1 from it, then multiply it by 2. For example, for triangle
number 28, value 7 is in position 4. So (4-1) * 2 = 6
In
cases c) if you wanted to know the total number of divisors, you look
for the position of the center number underlined, then multiply it by
2. For example, for triangle number 36, value 6 is in position 5.
So 5 * 2 = 10
Here is the program.
Dim triagNo As Integer ' Triangle number
Dim counter As Integer ' for calculating the next triangle number
Dim varValue As Integer ' Incremented in search for a Divisor
Dim NoDivisors As Integer ' number of Divisors found
Dim Divisor As Integer ' Value of found Divisor
Do
counter += 1
triagNo = triagNo + counter
varValue = 0
Divisor = 0
NoDivisors = 0
Do
varValue += 1
If triagNo Mod varValue = 0 Then ' is varValue a Divisor
Divisor = varValue
NoDivisors += 1
End If
Loop Until (triagNo / Divisor) <= Divisor ' Find when you reach the second centre value
If (triagNo / Divisor) = Divisor Then
NoDivisors = (NoDivisors - 1) * 2 + 1 ' cases a) and b)
Else
NoDivisors = (NoDivisors - 1) * 2 ' case c)
End If
Loop Until (NoDivisors > 500)
TextBox1.Text = triagNo
Z. Mwangi
----- Original Message ----
From: Andrew Mathenge <mathenge at gmail.com>
To: ubuntu Kenya <ubuntu-ke at lists.ubuntu.com>
Sent: Friday, July 11, 2008 3:24:23 AM
Subject: Re: Euler Problems
This email is from a ubuntu-ke subscriber to other subscribers inluding you:)
I've been working on #12 and the performance is simply not acceptable.
Has anyone been able to get this running as fast as some of the posts
on the site claim?
Andrew.
On Tue, Jul 8, 2008 at 12:40 PM, kinuthiA muchanE <muchanek at gmail.com> wrote:
> Andrew,
> For #10, if you do not use a sieve to find the primes, it will run
> forever!
> There is one called the Sieve of Erastothenes. Check it out on
> Wikipedia.
>
> Good luck :-)
> Kinuthia...
> On Tue, 2008-07-08 at 10:47 -0400, Andrew Mathenge wrote:
>> I'm still trying them. I started at #1 after the one you proposed
>> (#26) and I'm at #10 now. This one should be very simple but I don't
>> know why it's taking so long to run.
>>
>> Andrew.
>>
>> On Tue, Jul 8, 2008 at 6:52 AM, kinuthiA muchanE <muchanek at gmail.com> wrote:
>> > Habari,
>> > Anybody still trying these problems, you are all so, so silent...
>> >
>> > Kinuthia...
>> >
>> >
>
>
--
Ubuntu-ke mailing list
Ubuntu-ke at lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-ke
-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://lists.ubuntu.com/archives/ubuntu-ke/attachments/20080712/e8965b59/attachment.htm
More information about the Ubuntu-ke
mailing list