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> |
||