-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patheuler3.hs
12 lines (11 loc) · 893 Bytes
/
euler3.hs
1
2
3
4
5
6
7
8
9
10
11
12
import Data.Ratio
euler3 :: Integer -> Integer -> [Integer] -> Integer
euler3 limit x []
|(((floor(sqrt (fromIntegral limit :: Double)))^2) == limit) = (euler3 (floor(sqrt (fromIntegral limit :: Double))) x [])
|otherwise = euler3 limit 2 [0]
euler3 limit x (y:ys)
|((((div limit x)%1) == (limit%x)) && (x<=(floor(sqrt (fromIntegral limit :: Double))))) = euler3 limit (x+1) (x:y:ys)
|(((((div limit x)%1) == (limit%x)) && (x>(floor(sqrt (fromIntegral limit :: Double)))) && (y/=0)) && ((euler3 x 0 [])== x)) = x
|((((div limit x)%1) == (limit%x)) && (x>(floor(sqrt (fromIntegral limit :: Double)))) && (y==0)) = limit
|(((div limit x)%1) /= (limit%x)) = euler3 limit (x+1) (y:ys)
|otherwise = max (euler3 (div limit x) 0 []) (euler3 x 0 [])