Hoihoi
Ik doe voor de fun wat dingen met haskell voor projecteuler.net (wat basis wiskunde dingen uitrekenen) en zit nu de priemfactoren van een vrij groot getal te berekenen.
Hiervoor heb ik dit stukje software geschreven:
Hoe kan ik dit nou netter doen?
Ik dacht eerst dat de :
De zaak traag maakt ,maar ik neem aan dat de null lazy evaluated wordt... dus dat kan het niet zien.
Waar zit dan het probleem?
Aan de andere aknt, ik begin bij het factor-ontbinden bij 1 en ga naar getal/2 .
Dit moet omgedraaid als je de grootste het eerst wil vinden
.
edit:
Zou beter moeten werken, maar doet het ook niet echt.
Ik doe voor de fun wat dingen met haskell voor projecteuler.net (wat basis wiskunde dingen uitrekenen) en zit nu de priemfactoren van een vrij groot getal te berekenen.
Hiervoor heb ik dit stukje software geschreven:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| module Main where main::IO() main = do --even als testje putStrLn "The prime factors of 13195 should be: 5, 7, 13 and 29." print (filter isPrime (determineFactors 13195)) putStrLn "Max primefactor of 600851475143 : " print (maximum(filter isPrime (determineFactors 600851475143))) determineFactors :: Int -> [Int] determineFactors n = filter (/=1) (map ( (\x y -> if (x `mod` y) == 0 then y else 1 ) n) [1..(ceiling(fromIntegral((n)`div` 2)))] ) isPrime :: Int -> Bool isPrime n = if ((even n) || not( null(determineFactors n ))) then False else True |
Hoe kan ik dit nou netter doen?
Ik dacht eerst dat de :
code:
1
| not( null(determineFactors n ))) |
De zaak traag maakt ,maar ik neem aan dat de null lazy evaluated wordt... dus dat kan het niet zien.
Waar zit dan het probleem?
Aan de andere aknt, ik begin bij het factor-ontbinden bij 1 en ga naar getal/2 .
Dit moet omgedraaid als je de grootste het eerst wil vinden
edit:
code:
1
2
| determinePrimeFactors :: Int -> [Int] determinePrimeFactors n = filter (isPrime) (map ( (\x y -> if (x `mod` y) == 0 then y else 1 ) n) (reverse([1..(ceiling(fromIntegral((n)`div` 2)))])) ) |
Zou beter moeten werken, maar doet het ook niet echt.
[ Voor 9% gewijzigd door Boudewijn op 19-06-2008 16:53 ]