Skip to main content
Post Reopened by 200_success
fixed incorrect indentation in both solutions.
Source Link
import math
from functools import reduce
import time

def primeFactors(n):
    i = 2
    factors = {}
    num = 0
    while i ** 2 <= n:
            if n % i:
                i += 1
            else:
                n //= i
            num = factors.get(i, None)
            if num is None:
                factors[i] = 1
            else:
                factors[i] = num+1 
    if n > 1:
        num = factors.get(n, None)
        if num is None:
            factors[n] = 1
        else:
            factors[n] = num+1
    return factors

start_time = time.time()
numOfDivisors = 500
n = 2

while True:
    t = int(n*(n+1)/2)
    factors = primeFactors(t).values()

    if reduce(lambda x, y: x*y, [t+1 for t in factors]) >= numOfDivisors:
        print(t)
        break
    else:
        n += 1

print("----%s seconds ----" % (time.time() - start_time))
import math
import time

def primeFactors(n):
    i = 2
    factors = {}
    num = 0
    while i ** 2 <= n:
            if n % i:
                i += 1
            else:
                n //= i
            num = factors.get(i, None)
            if num is None:
                factors[i] = 1
            else:
                factors[i] = num+1 
    if n > 1:
        num = factors.get(n, None)
        if num is None:
            factors[n] = 1
        else:
            factors[n] = num+1
    return factors

start_time = time.time()
numOfDivisors = 500
n = 2

while True:
    t = int(n*(n+1)/2)
    factors = primeFactors(t).values()

    k = 1
    for i in factors:
        k *= (i+1)

    if k >= numOfDivisors:
        print(t)
        break
    else:
        n += 1

print("----%s seconds ----" % (time.time() - start_time))
import math
from functools import reduce
import time

def primeFactors(n):
    i = 2
    factors = {}
    num = 0
    while i ** 2 <= n:
            if n % i:
                i += 1
            else:
                n //= i
            num = factors.get(i, None)
            if num is None:
                factors[i] = 1
            else:
                factors[i] = num+1 
    if n > 1:
        num = factors.get(n, None)
        if num is None:
            factors[n] = 1
        else:
            factors[n] = num+1
    return factors

start_time = time.time()
numOfDivisors = 500
n = 2

while True:
    t = int(n*(n+1)/2)
    factors = primeFactors(t).values()

    if reduce(lambda x, y: x*y, [t+1 for t in factors]) >= numOfDivisors:
        print(t)
        break
    else:
        n += 1

print("----%s seconds ----" % (time.time() - start_time))
import math
import time

def primeFactors(n):
    i = 2
    factors = {}
    num = 0
    while i ** 2 <= n:
            if n % i:
                i += 1
            else:
                n //= i
            num = factors.get(i, None)
            if num is None:
                factors[i] = 1
            else:
                factors[i] = num+1 
    if n > 1:
        num = factors.get(n, None)
        if num is None:
            factors[n] = 1
        else:
            factors[n] = num+1
    return factors

start_time = time.time()
numOfDivisors = 500
n = 2

while True:
    t = int(n*(n+1)/2)
    factors = primeFactors(t).values()

    k = 1
    for i in factors:
        k *= (i+1)

    if k >= numOfDivisors:
        print(t)
        break
    else:
        n += 1

print("----%s seconds ----" % (time.time() - start_time))
import math
from functools import reduce
import time

def primeFactors(n):
    i = 2
    factors = {}
    num = 0
    while i ** 2 <= n:
        if n % i:
            i += 1
        else:
            n //= i
            num = factors.get(i, None)
            if num is None:
                factors[i] = 1
            else:
                factors[i] = num+1 
    if n > 1:
        num = factors.get(n, None)
        if num is None:
            factors[n] = 1
        else:
            factors[n] = num+1
    return factors

start_time = time.time()
numOfDivisors = 500
n = 2

while True:
    t = int(n*(n+1)/2)
    factors = primeFactors(t).values()

    if reduce(lambda x, y: x*y, [t+1 for t in factors]) >= numOfDivisors:
        print(t)
        break
    else:
        n += 1

print("----%s seconds ----" % (time.time() - start_time))
import math
import time

def primeFactors(n):
    i = 2
    factors = {}
    num = 0
    while i ** 2 <= n:
        if n % i:
            i += 1
        else:
            n //= i
            num = factors.get(i, None)
            if num is None:
                factors[i] = 1
            else:
                factors[i] = num+1 
    if n > 1:
        num = factors.get(n, None)
        if num is None:
            factors[n] = 1
        else:
            factors[n] = num+1
    return factors

start_time = time.time()
numOfDivisors = 500
n = 2

while True:
    t = int(n*(n+1)/2)
    factors = primeFactors(t).values()

    k = 1
    for i in factors:
        k *= (i+1)

    if k >= numOfDivisors:
        print(t)
        break
    else:
        n += 1

print("----%s seconds ----" % (time.time() - start_time))
Post Closed as "Not suitable for this site" by 200_success
added 32 characters in body; edited tags; edited title; edited tags
Source Link
200_success
  • 145.7k
  • 22
  • 191
  • 481

What's the better in a normal case between Project Euler 12 (triangle numbers), solved using functools.reduce() and for-loops in Python?looping

I'm trying to solve problem 12 on Project Euler websiteI have solved problem 12 on Project Euler website, which reads as:

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?

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?

What's the better in a normal case between functools.reduce() and for-loops in Python?

I'm trying to solve problem 12 on Project Euler website, which reads as:

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?

Project Euler 12 (triangle numbers), solved using functools.reduce() and looping

I have solved problem 12 on Project Euler website, which reads:

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?

edited tags
Link
Tunaki
  • 9.3k
  • 1
  • 31
  • 46
Source Link
Loading