Find adjacent primes which differ by a square integer: Difference between revisions

Add Factor
(Added XPL0 example.)
(Add Factor)
Line 133:
(997813, 997877)
</pre>
 
=={{header|Factor}}==
{{works with|Factor|0.99 2021-06-02}}
<lang factor>USING: formatting io kernel lists lists.lazy math math.functions
math.primes.lists sequences ;
 
: adj-primes ( -- list ) lprimes dup cdr lzip ;
 
: diff ( pair -- n ) first2 swap - ;
 
: adj-primes-diff ( -- list )
adj-primes [ dup diff suffix ] lmap-lazy ;
 
: big-adj-primes-diff ( -- list )
adj-primes-diff [ last 36 > ] lfilter ;
 
: square? ( n -- ? ) sqrt dup >integer number= ;
 
: big-sq-adj-primes-diff ( -- list )
big-adj-primes-diff [ last square? ] lfilter ;
 
"Adjacent primes under a million whose difference is a square > 36:" print nl
"p1 p2 difference" print
"============================" print
big-sq-adj-primes-diff [ second 1,000,000 < ] lwhile
[ "%-6d %-6d %d\n" vprintf ] leach</lang>
{{out}}
<pre>
Adjacent primes under a million whose difference is a square > 36:
 
p1 p2 difference
============================
89689 89753 64
107377 107441 64
288583 288647 64
367957 368021 64
381103 381167 64
396733 396833 100
400759 400823 64
445363 445427 64
623107 623171 64
625699 625763 64
637003 637067 64
710713 710777 64
725209 725273 64
779413 779477 64
801883 801947 64
803749 803813 64
821677 821741 64
832519 832583 64
838249 838349 100
844777 844841 64
883807 883871 64
912103 912167 64
919447 919511 64
954763 954827 64
981823 981887 64
997813 997877 64
</pre>
 
=={{header|Fermat}}==
<lang fermat>Func Issqr( n ) = if (Sqrt(n))^2=n then 1 else 0 fi.;
1,808

edits