RosettaCodeData/Task/Strong-and-weak-primes/Factor/strong-and-weak-primes.factor
2023-07-01 13:44:08 -04:00

25 lines
778 B
Factor

USING: formatting grouping kernel math math.primes sequences
tools.memory.private ;
IN: rosetta-code.strong-primes
: fn ( p-1 p p+1 -- p sum ) rot + 2 / ;
: strong? ( p-1 p p+1 -- ? ) fn > ;
: weak? ( p-1 p p+1 -- ? ) fn < ;
: swprimes ( seq quot -- seq )
[ 3 <clumps> ] dip [ first3 ] prepose filter [ second ] map
; inline
: stats ( seq n -- firstn count1 count2 )
[ head ] [ drop [ 1e6 < ] filter length ] [ drop length ]
2tri [ commas ] bi@ ;
10,000,019 primes-upto [ strong? ] over [ weak? ]
[ swprimes ] 2bi@ [ 36 ] [ 37 ] bi* [ stats ] 2bi@
"First 36 strong primes:\n%[%d, %]
%s strong primes below 1,000,000
%s strong primes below 10,000,000\n
First 37 weak primes:\n%[%d, %]
%s weak primes below 1,000,000
%s weak primes below 10,000,000\n" printf