Successive prime differences: Difference between revisions

m
→‎{{header|REXX}}: added the REXX computer programming language for this task.
m (Moved Go entry into correct alphabetic order.)
m (→‎{{header|REXX}}: added the REXX computer programming language for this task.)
Line 330:
Last group: 997141, 997147, 997151, 997153
Count: 306</pre>
 
=={{header|REXX}}==
<lang rexx>/*REXX program finds and displays primes with successive differences (up to a limit).*/
parse arg H . 1 . difs /*allow the highest number be specified*/
if H=='' | H=="," then H= 1000000 /*Not specified? Then use the default.*/
if difs='' then difs= 2 1 2.2 2.4 4.2 6.4.2 /* " " " " " " */
call genP H
 
do j=1 for words(difs) /*traipse through the lists.*/
dif= translate( word(difs, j),,.); dw= words(dif) /*obtain true differences. */
do i=1 for dw; dif.i= word(dif, i) /*build an array of diffs. */
end /*i*/ /* [↑] for optimization. */
say center('primes with differences of:' dif, 50, '─') /*display title.*/
p= 1; c= 0; grp= /*init. prime#, count, grp.*/
do a=1; p= nextP(p+1); if p==0 then leave /*find the next DIF primes*/
aa= p; !.= /*AA: nextP; the group #'s.*/
!.1= p /*assign 1st prime in group.*/
do g=2 for dw /*get the rest of the group.*/
aa= nextP(aa+1); if aa==0 then leave a /*obtain the next prime. */
!.g= aa; _= g-1 /*prepare to add difference.*/
if !._ + dif._\==!.g then iterate a /*determine if fits criteria*/
end /*g*/
c= c+1 /*bump count of # of groups.*/
grp= !.1; do b=2 for dw; grp= grp !.b /*build a list of primes. */
end /*b*/
if c==1 then say ' first group: ' grp /*display the first group. */
end /*a*/
/* [↓] test if group found.*/
if grp=='' then say " (none)" /*display the last group. */
else say ' last group: ' grp /* " " " " */
say ' count: ' c /* " " group count. */
say
end /*j*/
exit /*stick a fork in it, we're all done. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
nextP: do nxt=arg(1) to H; if @.nxt==. then return nxt; end /*nxt*/; return 0
/*──────────────────────────────────────────────────────────────────────────────────────*/
genP: procedure expose @.; parse arg N; != 0; @.=.; @.1= /*initialize the array.*/
do e=4 by 2 for (N-1)%2; @.e=; end /*treat the even integers > 2 special.*/
/*all primes are indicated with a "." */
do j=1 by 2 for (N-1)%2; k= j /*use odd integers up to N inclusive.*/
if @.j==. then do; if ! then iterate /*Prime? Should skip the top part ? */
jj= j * j /*compute the square of J. ___ */
if jj>N then != 1 /*indicate skip top part if j > √ N */
do m=jj to N by j+j; @.m=; end /*odd multiples.*/
end /* [↑] strike odd multiples ¬ prime. */</lang>
{{out|output|text=&nbsp; when using the default inputs:}}
<pre>
──────────primes with differences of: 2───────────
first group: 3 5
last group: 999959 999961
count: 8169
 
──────────primes with differences of: 1───────────
first group: 2 3
last group: 2 3
count: 1
 
─────────primes with differences of: 2 2──────────
first group: 3 5 7
last group: 3 5 7
count: 1
 
─────────primes with differences of: 2 4──────────
first group: 5 7 11
last group: 999431 999433 999437
count: 1393
 
─────────primes with differences of: 4 2──────────
first group: 7 11 13
last group: 997807 997811 997813
count: 1444
 
────────primes with differences of: 6 4 2─────────
first group: 31 37 41 43
last group: 997141 997147 997151 997153
count: 306
</pre>
 
=={{header|Sidef}}==