top of page

Finding the Largest Product in a Series: Project Euler Problem 8

5 days ago

2 min read

0

1

0


Project Euler Problem 8 asks us to find the thirteen adjacent digits in a 1000-digit number that have the greatest product. It's a straightforward problem that tests our ability to work with strings, iteration, and basic arithmetic operations.


The Problem

Given a 1000-digit number, we need to:

  1. Extract every possible sequence of 13 consecutive digits

  2. Calculate the product of each sequence

  3. Return the maximum product found


The Solution

Here's my Python solution:

python

products = []
n = "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450"
n_string = str(n)
n_list = list(n_string)

print(n_list)

for idx in range(len(n_list)-12):
    a1 = int(n_list[idx])
    a2 = int(n_list[idx+1])
    b1 = int(n_list[idx+2])
    b2 = int(n_list[idx+3])
    c1 = int(n_list[idx+4])
    c2 = int(n_list[idx+5])
    d = int(n_list[idx+6])
    e = int(n_list[idx+7])
    f = int(n_list[idx+8])
    g = int(n_list[idx+9])
    h = int(n_list[idx+10])
    i = int(n_list[idx+11])
    j = int(n_list[idx+12])
    #print(a1,a2,b1,b2,c1,c2,d,e,f,g,h,i,j)
    products.append(a1 * a2 * b1 * b2 * c1 * c2 * d * e * f * g * h * i * j)


print(max(products))

How It Works

Step 1: Setup I store the 1000-digit number as a string and convert it to a list of individual characters for easy indexing.

Step 2: Sliding window iteration The loop runs from index 0 to len(n_list)-12. Why -12? Because we need 13 consecutive digits—starting at the last valid position leaves exactly 13 digits remaining (indices idx through idx+12).

Step 3: Extract and multiply At each position, I explicitly extract all 13 consecutive digits, convert them from strings to integers, and multiply them together. The result is stored in the products list.

Step 4: Find the maximum The final line prints the maximum product from all sequences examined.

The Result

Running this solution gives us 23514624000 as the largest product of thirteen adjacent digits.

Key Insights

The solution takes an explicit approach—each of the 13 digits is assigned to its own variable (a1, a2, b1, b2, etc.) before multiplication. While this might seem verbose, it makes the logic completely transparent and easy to debug.

The core pattern here is a sliding window: we systematically examine every contiguous subsequence of a fixed length (13 digits) by moving our "window" one position at a time through the entire number.

5 days ago

2 min read

0

1

0

Related Posts

Comments

Share Your ThoughtsBe the first to write a comment.
bottom of page