Project Euler – Problem # 12 – Solved with Go

What is the value of the first triangle number to have over five hundred divisors?

The sequence of triangle numbers is generated by adding the natural numbers. So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The first ten terms would be:

1, 3, 6, 10, 15, 21, 28, 36, 45, 55, …

Let us list the factors of the first seven 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

We can see that 28 is the first triangle number to have over five divisors.

What is the value of the first triangle number to have over five hundred divisors?

One Possible Solution: Go

package main

import "fmt"
import "math"

func main() {
	counter := 0
	TriangleNumber := 0
	Switch := 1
	for Switch >= 1 {
		counter++
		TriangleNumber += counter
		if factors(TriangleNumber) > 500 {
			fmt.Println(TriangleNumber)
			Switch = 0
		}
	}
}

func factors(n int) (facCount int) {
	facCounter := 0
	k := int(math.Sqrt(float64(n)))
	for i := 1; i < k+1; i++ {
		if n%i == 0 {
			facCounter++
		}
	}
	return facCounter * 2

}
Advertisements

Project Euler – Problem # 12 – Solved with Java

What is the value of the first triangle number to have over five hundred divisors?

The sequence of triangle numbers is generated by adding the natural numbers. So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The first ten terms would be:

1, 3, 6, 10, 15, 21, 28, 36, 45, 55, …

Let us list the factors of the first seven 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

We can see that 28 is the first triangle number to have over five divisors.

What is the value of the first triangle number to have over five hundred divisors?

One Possible Solution: Java


public class Problem_12 {
	public static void main(String [] args){
		int counter = 0;
		int TriangleNumber = 0;
		boolean Switch = true;
		while(Switch == true){
			counter ++;
			TriangleNumber += counter;
			if(Factors(TriangleNumber) > 500){
				System.out.println(TriangleNumber);
				Switch = false;
			}
		}
		
	}
	public static int Factors(int n){
		// Finds all the factors of a number (n)
		// and returns the number of factors.
		int counter = 0;
		int k = (int) Math.sqrt(n);
		for(int i = 1; i < k + 1; i ++){
			if(n % i == 0){
				counter ++;
			}
		}
		return 2 * counter;
	}

}

Project Euler – Problem # 12 – Solved with Python

What is the value of the first triangle number to have over five hundred divisors?

The sequence of triangle numbers is generated by adding the natural numbers. So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The first ten terms would be:

1, 3, 6, 10, 15, 21, 28, 36, 45, 55, …

Let us list the factors of the first seven 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

We can see that 28 is the first triangle number to have over five divisors.

What is the value of the first triangle number to have over five hundred divisors?

**********

Helpful links:

Help with finding all the factors of a number – http://stackoverflow.com/questions/6800193/what-is-the-most-efficient-way-of-finding-all-the-factors-of-a-number-in-python

One Possible Solution: Python

# Python version = 2.7.2
# Platform = win32
# Run time =  16.4755609827 seconds

import math
import time

def factors(n):
    """Returns a set of all the factors of a triangle number (n)."""
    return set(reduce(list.__add__, ([i, n//i] for i in range(1, int(math.sqrt(n)) + 1) if n % i == 0)))
    
def main():
    """Main program"""
    start_time = time.clock()
    counter = 0         # Initialise counter for natural numbers
    TriangleNumber = 0  # Initialise triangle number variable
    switch = True       # Switch for while loop
    while switch == True:
        counter += 1
        TriangleNumber += counter               # Get the current triangle number.
        if len(factors(TriangleNumber)) > 500:  # Find all the factors of TriangleNumber, 
            switch = False                      # if greater than 500 stop the while loop
    print(TriangleNumber)                       # and print the last triangle number.
    run_time = time.clock() - start_time
    print "Run time = ", run_time
        
if __name__ == '__main__':
    main()