Strong and weak primes: Difference between revisions

Content added Content deleted
m (Put Sieve of Eratosthenes implementation in separate header file)
No edit summary
Line 676: Line 676:


The number of weak primes below 10,000,000 is 321,750
The number of weak primes below 10,000,000 is 321,750
</pre>
=={{header|Haskell}}==
<lang haskell>import Text.Printf (printf)
import Data.Numbers.Primes (primes)

xPrimes :: (Real a, Fractional t1, Fractional t2) => (t1 -> t2 -> Bool) -> [a] -> [a]
xPrimes op ps@(p1:p2:p3:xs)
| realToFrac p2 `op` (realToFrac (p1 + p3) / 2) = p2 : xPrimes op (tail ps)
| otherwise = xPrimes op (tail ps)

main :: IO ()
main = do
printf "First 36 strong primes: %s\n" . show . take 36 $ strongPrimes
printf "Strong primes below 1,000,000: %d\n" . length . takeWhile (<1000000) $ strongPrimes
printf "Strong primes below 10,000,000: %d\n\n" . length . takeWhile (<10000000) $ strongPrimes

printf "First 37 weak primes: %s\n" . show . take 37 $ weakPrimes
printf "Weak primes below 1,000,000: %d\n" . length . takeWhile (<1000000) $ weakPrimes
printf "Weak primes below 10,000,000: %d\n\n" . length . takeWhile (<10000000) $ weakPrimes
where strongPrimes = xPrimes (>) primes
weakPrimes = xPrimes (<) primes</lang>
{{out}}
<pre>
First 36 strong primes: [11,17,29,37,41,59,67,71,79,97,101,107,127,137,149,163,179,191,197,223,227,239,251,269,277,281,307,311,331,347,367,379,397,419,431,439]
Strong primes below 1,000,000: 37723
Strong primes below 10,000,000: 320991

First 37 weak primes: [3,7,13,19,23,31,43,47,61,73,83,89,103,109,113,131,139,151,167,181,193,199,229,233,241,271,283,293,313,317,337,349,353,359,383,389,401]
Weak primes below 1,000,000: 37780
Weak primes below 10,000,000: 321750
</pre>
</pre>