1

I am attempting to solve problem 8 of projecteuler. I am having difficulty understanding exactly why my code is not outputting the correct solution. I am aware that the solution to this problem is above the 32 bit maximum, but I do not know how to allow python to work with numbers above that within my code.

For reference, the original question states : "Find the thirteen adjacent digits in the 1000-digit number that have the greatest product. What is the value of this product?"

from numpy import prod



f = 7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450


z = list(int(i) for i in str(f))
a1 =[]


start = 0
end = start + 13
while end <= len(z):
    a1.append(prod(z[start:end]))
    start+=1
    end+=1

a = a1.index(max(a1))
print(a1[a]) #prints the product solution

print('---')

dimlen=end-start
newstart = a
newend=a+dimlen
print(z[newstart:newend]) #prints the integers that build the solution

I keep getting the number 2091059712, (the solution is 23514624000)

Rohitashwa Nigam
  • 399
  • 5
  • 16
George
  • 120
  • 8
  • Python itself has no 32-bit limit, however you are choosing to do the product with numpy, which is designed to work primarily with fixed-sized integers. You would need to add a `dtype=` parameter to the `prod()` call that specifies a sufficiently large integer type - looks like 64 bit would do the job, as the maximum possible product of 13 decimal digits is about 41 bits long. – jasonharper Apr 02 '19 at 17:51

1 Answers1

0

I think it might be numpy.prod. It might be preserving the input type and wrapping the value. Try using:

def prod(it):
    p = 1
    for m in it:
        p *= m
    return p
Dan D.
  • 73,243
  • 15
  • 104
  • 123
  • Notably from the [documentation](https://docs.scipy.org/doc/numpy/reference/generated/numpy.prod.html#numpy-prod): *"Arithmetic is modular when using integer types, and no error is raised on overflow. That means that, on a 32-bit platform:"* – Nick is tired Apr 02 '19 at 17:52