Data update
This commit is contained in:
parent
29a5eea0d4
commit
5c1bb7bfa9
2011 changed files with 35081 additions and 3229 deletions
|
|
@ -1,38 +1,76 @@
|
|||
/*REXX program finds largest left─ and right─truncatable primes ≤ 1m (or argument 1).*/
|
||||
parse arg hi .; if hi=='' then hi= 1000000 /*Not specified? Then use default of 1m*/
|
||||
call genP /*generate some primes, about hi ÷ 2 */
|
||||
/* [↓] find largest left truncatable P*/
|
||||
do L=# by -1 for # /*search from top end; get the length.*/
|
||||
do k=1 for length(@.L); _= right(@.L, k) /*validate all left truncatable primes.*/
|
||||
if \!._ then iterate L /*Truncated number not prime? Skip it.*/
|
||||
end /*k*/
|
||||
leave /*egress, found left truncatable prime.*/
|
||||
end /*L*/
|
||||
/* [↓] find largest right truncated P.*/
|
||||
do R=# by -1 for # /*search from top end; get the length.*/
|
||||
do k=1 for length(@.R); _= left(@.R, k) /*validate all right truncatable primes*/
|
||||
if \!._ then iterate R /*Truncated number not prime? Skip it.*/
|
||||
end /*k*/
|
||||
leave /*egress, found right truncatable prime*/
|
||||
end /*R*/
|
||||
/*REXX program finds largest left- and right-truncatable primes less than hi */
|
||||
Parse Arg hi .
|
||||
If hi=='' Then
|
||||
hi=1000000 /* Not specified? Then use default */
|
||||
Call genP /* generate primes up to hi */
|
||||
|
||||
say 'The largest left─truncatable prime ≤' hi " is " right(@.L, w)
|
||||
say 'The largest right─truncatable prime ≤' hi " is " right(@.R, w)
|
||||
exit /*stick a fork in it, we're all done. */
|
||||
/*──────────────────────────────────────────────────────────────────────────────────────*/
|
||||
genP: !.= 0; w= length(hi) /*placeholders for primes; max width. */
|
||||
@.1=2; @.2=3; @.3=5; @.4=7; @.5=11 /*define some low primes. */
|
||||
!.2=1; !.3=1; !.5=1; !.7=1; !.11=1 /* " " " " flags. */
|
||||
#=5; s.#= @.# **2 /*number of primes so far; prime². */
|
||||
/* [↓] generate more primes ≤ high.*/
|
||||
do j=@.#+2 by 2 for max(0, hi%2-@.#%2-1) /*find odd primes from here on. */
|
||||
parse var j '' -1 _; if _==5 then iterate /*J divisible by 5? (right dig)*/
|
||||
if j// 3==0 then iterate /*" " " 3? */
|
||||
if j// 7==0 then iterate /*" " " 7? */
|
||||
/* [↑] the above five lines saves time*/
|
||||
do k=5 while s.k<=j /* [↓] divide by the known odd primes.*/
|
||||
if j // @.k == 0 then iterate j /*Is J ÷ X? Then not prime. ___ */
|
||||
end /*k*/ /* [↑] only process numbers ≤ √ J */
|
||||
#= #+1; @.#= j; s.#= j*j; !.j= 1 /*bump # of Ps; assign next P; P²; P# */
|
||||
end /*j*/
|
||||
return
|
||||
/* find largest left truncatable Prime */
|
||||
Do l=prime.0 By -1 /* search from top end; */
|
||||
left.0=length(prime.l)
|
||||
Do k=1 For length(prime.l)
|
||||
_=right(prime.l,k) /* validate left truncatable ptime */
|
||||
left.k=_
|
||||
If \is_prime._ Then
|
||||
Iterate l /* Truncated number not prime? Skip */
|
||||
End
|
||||
Leave
|
||||
End
|
||||
|
||||
/* find largest right truncated Prime */
|
||||
Do r=prime.0 By -1 /* search from top end; */
|
||||
right.0=length(prime.r)
|
||||
Do k=1 For length(prime.r)
|
||||
_=left(prime.r,k)
|
||||
right.k=_
|
||||
If \is_prime._ Then
|
||||
Iterate r /* Truncated number not prime? Skip */
|
||||
End
|
||||
Leave
|
||||
End
|
||||
|
||||
Say 'The largest left-truncatable prime smaller than' hi 'is' prime.l
|
||||
do i=left.0-1 to 1 By -1
|
||||
say right(left.i,66)
|
||||
End
|
||||
Say 'The largest right-truncatable prime smaller than' hi 'is' prime.r
|
||||
do i=right.0-1 to 1 By -1
|
||||
say copies(' ',60)right.i
|
||||
End
|
||||
Exit /* stick a fork in it, we're all done */
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
genp:
|
||||
Call time 'R'
|
||||
Call init 2 3 5 7 11 13 17 19
|
||||
Do j=21 to hi By 2
|
||||
Select
|
||||
When right(j,1)=5 Then Iterate
|
||||
When j//3==0 Then Iterate
|
||||
When j//7==0 Then Iterate
|
||||
Otherwise Nop
|
||||
End
|
||||
Do k=5 While s.k<=j
|
||||
If j//prime.k==0 Then
|
||||
Iterate j
|
||||
End
|
||||
Call store j /* j is prime */
|
||||
End
|
||||
Say prime.0 'primes smaller than' hi '--' time('E') 'seconds'
|
||||
Return
|
||||
|
||||
init:
|
||||
Parse Arg plist
|
||||
is_prime.=0
|
||||
prime.=0
|
||||
Do i=1 To words(plist)
|
||||
Call store word(plist,i)
|
||||
End
|
||||
Return
|
||||
|
||||
store:
|
||||
Parse Arg p
|
||||
z=prime.0+1
|
||||
prime.z=p
|
||||
s.z=p*p
|
||||
prime.0=z
|
||||
is_prime.p=1
|
||||
Return
|
||||
|
|
|
|||
10
Task/Truncatable-primes/Uiua/truncatable-primes.uiua
Normal file
10
Task/Truncatable-primes/Uiua/truncatable-primes.uiua
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
Mag ← 6
|
||||
MaxP ← ⁿ:10⌊÷2Mag
|
||||
# Pre-calculate primes up to root of largest n
|
||||
Primes ← ⇌◌⍢(▽≠0◿⊢..⟜(⊂⊢)|>0⧻.):[]⊂2↘1+1×2⇡⌊÷2 MaxP # Build primes
|
||||
IsPrime ← ⨬(/↧≡(≠0◿)|1)∊:,,Primes
|
||||
RAdd ← ♭⊞(+×10):1_3_7_9 # Add suffixes
|
||||
LAdd ← ♭⊞+×ⁿ:10⌈ₙ10⊢,+1⇡9 # Add prefixes
|
||||
LastTP! ← ⊡¯1⍥(▽⊸≡IsPrime^!)-1Mag 2_3_5_7 # Build and filter
|
||||
$"Right truncating: _"LastTP!RAdd
|
||||
$"Left truncating: _"LastTP!LAdd
|
||||
Loading…
Add table
Add a link
Reference in a new issue