Data update

This commit is contained in:
Ingy döt Net 2025-06-11 20:16:52 -04:00
parent 72eb4943cb
commit 4d5544505c
2347 changed files with 62432 additions and 16731 deletions

View file

@ -1,33 +1,25 @@
fastfunc isprim num .
i = 2
while i <= sqrt num
if num mod i = 0
return 0
.
if num mod i = 0 : return 0
i += 1
.
return 1
.
func nextprime n .
fastfunc nextprime n .
n += 1
while isprim n = 0
n += 1
.
while isprim n = 0 : n += 1
return n
.
func spd n d[] .
if isprim n = 0
return 0
.
if isprim n = 0 : return 0
for i = 1 to len d[]
if nextprime n <> n + d[i]
return 0
.
if nextprime n <> n + d[i] : return 0
n += d[i]
.
return 1
.
proc print_set n d[] . .
proc print_set n d[] .
write "( " & n & " "
for i = 1 to len d[]
write n + d[i] & " "
@ -35,18 +27,14 @@ proc print_set n d[] . .
.
print ")"
.
proc show max d[] . .
proc show max d[] .
write "Differences of "
for d in d[]
write d & " "
.
for d in d[] : write d & " "
print ""
for n = 2 to max - d[len d[]]
if spd n d[] = 1
c += 1
if c = 1
print_set n d[]
.
if c = 1 : print_set n d[]
last = n
.
.

View file

@ -1,45 +1,54 @@
/*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
-- 12 Apr 2025
include Settings
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 /*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. */
end /*j*/; return
call Time('r')
say 'SUCCESSIVE PRIME DIFFERENCES'
say version
say
call Primes 1e6
say 'For the' prim.0 'primes up to 1 million...'
say
call Task 1
call Task 2
call Task 2,2
call Task 2,4
call Task 4,2
call Task 2,4,6
call Task 2,4,6,8
call Task 2,4,6,8,10
call Task 2,4,6,8,10,12
call Task 2,4,6,8,10,12,14
call Task 32,16,8,4,2
say Format(Time('e'),,3) 'seconds'
exit
Task:
procedure expose prim.
diffs = ''; first = ''; last = ''
do i = 1 to Arg()
diffs = diffs||Arg(i)' '
end
count = 0
do i = 1 to prim.0-Arg()
a = prim.i; work = a; k = i
do j = 1 to Arg()
k = k+1; b = prim.k
if b-a <> Arg(j) then
iterate i
work = work b; a = b
end
count = count+1
if first = '' then
first = work
last = work
end
say 'Differences ' diffs
say 'First group ' first
say 'Last group ' last
say 'Groups found' count
say
return
include Sequences
include Functions
include Abend