Euler's sum of powers conjecture: Difference between revisions

Content added Content deleted
m (→‎lightning-fast computation: added CPU timings for a fast PC.)
Line 1,725: Line 1,725:
import Data.List (find, intercalate)
import Data.List (find, intercalate)
import Data.Maybe (maybe)
import Data.Maybe (maybe)



------------- EULER'S SUM OF POWERS CONJECTURE -----------
------------- EULER'S SUM OF POWERS CONJECTURE -----------

counterExample :: M.Map Int (Int, Int) -> M.Map Int Int -> Maybe (Int, Int)
counterExample :: M.Map Int (Int, Int) -> M.Map Int Int -> Maybe (Int, Int)
counterExample sumMap powerMap =
counterExample sumMap powerMap =
Line 1,744: Line 1,746:
powerMapForRange :: [Int] -> M.Map Int Int
powerMapForRange :: [Int] -> M.Map Int Int
powerMapForRange = M.fromList . (zip =<< fmap (^ 5))
powerMapForRange = M.fromList . (zip =<< fmap (^ 5))



--------------------------- TEST -------------------------
--------------------------- TEST -------------------------
Line 1,749: Line 1,752:
main = do
main = do
let xs = [1 .. 249]
let xs = [1 .. 249]
sumMap = sumMapForRange xs
(sumMap, powerMap) = ((,) . sumMapForRange <*> powerMapForRange) xs
powerMap = powerMapForRange xs
putStrLn $
putStrLn $
"Euler's sum of powers conjecture – " <>
"Euler's sum of powers conjecture – " <>
Line 1,758: Line 1,760:
(counterExample sumMap powerMap)
(counterExample sumMap powerMap)


showExample ::
showExample :: M.Map Int (Int, Int) -> M.Map Int Int -> [Int] -> (Int, Int) -> String
M.Map Int (Int, Int) -> M.Map Int Int ->
[Int] -> (Int, Int) -> String
showExample sumMap powerMap xs (p, s) =
showExample sumMap powerMap xs (p, s) =
"a counter-example in range " <> rangeString xs <> ":\n\n" <>
"a counter-example in range " <> rangeString xs <> ":\n\n" <>