Data update
This commit is contained in:
parent
72eb4943cb
commit
4d5544505c
2347 changed files with 62432 additions and 16731 deletions
|
|
@ -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
|
||||
.
|
||||
.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue