8A. Numbers & Counting

Constants such as π (1p1), half-π (1r2p1), integers expressed in base sixteen (16b2a for 42), complex numbers in terms of real and imaginary parts (2j3), and complex numbers in terms of magnitude and angle in degrees or radians (3ad90 and 3ar1) are commonly needed in programming.

Constant functions are also needed, as in odd=: 1:+2:*i.. The phrase c"r produces a constant function of rank r for any constant c (numeric, or other such as characters or boxed).

Many other constants, such as the reciprocal of π (1p_1), the multipliers used in converting from radians to degrees (180p_1) and from degrees to radians (1r180p1), the kth prime(p: k), and the list of prime factors of an integer (q: i) are commonly used.

The following phrases illustrate the production of various numbers, including such lists and tables as the binomial coefficients, various grids, Stirling numbers, primes and prime factors:

n0  =: pi=: 1p1

π

v1 =: PI=: 1p1"_

Other ranks are possible

n2 =: 2p1 1r2p1 1r6p1

List of multiples of π

n3 =: 2p_1 1r2p_1 1r6p_1

Multiples of reciprocal π

n4 =: 1x1

Euler&#146s number (2.71828 ...)

v5 =: 1x1 1x_1 _1x_1"0

List function of rank zero

m6 =: pitimes=: 1p1&*

Like o. but infinite rank

m7 =: ln=: 1x1&^.

Like ^. (natural log)

m8 =: ln=: 1x1"_ ^. ]

   "

m9 =: [:^ 0j2p1&% * i.

Roots of unity; e.g. m9 5

m10=: 1:=1:^m9

Roots of unity; e.g. m10 5

m11=: sbase=: %:@(2p1&%)* %&1x1 ^]

Stirling’s approximation, base term

m12=: scorr=: 1 1r12 1r288       _139r51840 _571r2488320&p.@%

Stirling’s approximation, correction

m13=: stirg =: sbase * scorr

Stirling’s approx for Γ(y) AS[1] 6.1.37]

n14=: |1-(!10)%stirg 1+10

Relative error for !10

m15=: stirf =: ^@(1r12&%)      *%:@(2p1&*) * %&1x1 ^ ] 

Stirling’s approx to !y AS[1] 6.1.38]

n16=: |1-(!10)%stirf 10

Relative error for !10

m17=: even=: 2:*i.

Even integers

m18=: odd=: >:@even

Odd integers

m19=: odd=: 1:+2:*i.

Odd integers

m20=: grid=: +`(*i.)/

grid b,s,n is From b step s for n

m21=: Ai=: >:@i.

Augmented integers (1 to y)

m22=: +/\@($&1)

   "   (but not negint arg)

m23=: Ei=: i.@>:

Extended integers (0 to y)

m24=: Si=: Ei@+: - ]

Symmetric integers (-y to y)

m25=: bc=: Ei ! ]

Binomial coefficients

m26=: (0&,+,&0)^:([`1:) 

   "

m27=: bct=: Ei !/ Ei

Pascal’s triangle (bc table)

m28=: !/~@Ei

   "

m29=: !~/~@Ei

Pascal’s triangle

m30=: (0&,+,&0)^:(i.`1:)

   "

m31=: 1 1&([: +//. */)^:(i.`1:)

   "

m32=: +/\@(|.!.0)^:(i.`($&1))

   "

m33=: odometer=: #: i.@(*/)

All #s in radix y (odometer)

m34=: >@,@{@(i.&.>"_) 

   "   Try m34 10 10

m35=: ,:@i.@0:`([: ,/ i.@{. ,."0         2$:@}.)@.(*@#)

   "   Try m35 2 2 2

m36=: tt=: #:@i.@(2&^)

Truth table of order y

m37=: odometer@($&2)

   "

m38=: >@,@{@($&(<0 1))

   "

m39=: ,:@i.`([: ,/ i.@2: ,."0 2      $:@<:)@.*

   "

m40=: [:|:2&^($ #&0 1)"(0)2&^@i.@-

   "

m41=: (i.@# = i.~) # ]

Nub (all distinct items of) ~.

m42=: ~: # ]

   "   Try m42 2 7 1 8 2 8

m43=: +./@(</\"1"_)@= # ]

   "   m43 ;:'all in all'

m44=: ~.@(i.~) { ]

   "

m45=: {./.~

   "

m46=: ({.;#)/.~

Nub and count

m47=: #/.~

   "   Try m47 2 7 1 8 2

m48=: +/"1@=

   "   Try m48 ;: 'all in all'

m49=: 1: #. =

   "

m50=: ifb=: # i.@#

Index from boolean

d51=: bfi=: i.@[ e. ]

Boolean from index; e.g. 0 d51 5 7

d52=: 1:`]`($&0@[)}

Boolean from index

m53=: cfpv=: #;.1

Count from partition vector

m54=: pvfc=: [: ; {.&1&.>

Partition vector from count

m55=: i.@(+/) e. 0&,@(+/\)

   "

n56=: 2147483647=p: 105097564

The 105,097,564-th prime (0 origin)

m57=: lp=: p:@i.

List first y primes

m58=: fotp=: (2&(_2:=-/\)#}:)@lp

First of twin primes among first y

m59=: p:^:_1

Number of primes less than y

n60=: 2 2 2 3 5 -: q: 120

Prime factorization of 120

m61=: taut=: -: */@q:

y = product of factors. Try m61 12345

m62=: dpe=: (~. ,: 1: #. =)@q:

Distinct primes with exponents

m63=: |:@(({.,#)/.~)@q:

   "

m64=: taut=: = */@(^/)@dpe

y = product over powers. Try m64 120

m65=: = */ .^/@dpe

   "

m66=: divisors=: /:~ @ , @ > @ (*/&.>/) @ ((^ i.@>:)&.>/) @ (__&q:)

Divisors of y . Try m66 900

m67=: /:~@~.@(*/ .^"1 tt@#)@q:

   "

m68=: /:~ @ , @: (*/&>) @ {@ (<@(1&,)@(*/\)/.~) @ q:

   "

m69=: >:@i. ([ #~ 0: = |) ]

   "

m70=: perfect=: +: = +/@divisors

Perfect number test

m71=: 1: = #@q:

Prime test

d72=: q:@[ -: -.&q:

Relatively prime test

d73=: 1: = +.

   "

m74=: totient=:* -.@%@~.&.q:

Totient GKP[3] 4.53]

m75=: */@(^/-(^<:)/)@dpe

   "

m76=: [: +/ 1: = (+.i.)

   "

m77=: [:/:~[:~.]|[:*:[:m50]m73[:i.]

Quadratic residues

d78=: L=: [:{&_1 1|~e.(|*:@}.@i.)@]

Legendre symbol

d79=: L * L~

Quadratic reciprocity

d80=: cfe=:<.@(([:%1:|])^:(i.@[`]))

x terms of continued fraction expansion of y

m81=: rapprox=: (, % +.)&1"0

Rational approximation to y

m82=: [:>:[:m50]m72"0[:>:[:i.[:<:]

Numbers prime to y

m83=: 3 : '<.@o.&.((10^y.)&*) 1'

y digits of π

m84=: [: +/ %@!@i.

y digits of e

d85=: 4 : '-:@(+y.&%)^:(>.2^.1>.x.-16)      x:%:y.'

x digits of the square root of integer y

The last three phrases illustrate operations on extended precision arguments. (0j_40 ": y formats y in exponential notation using 40 digits.)

   0j_40 ": m83 40x
3.1415926535897932384626433832795028841971e0
   0j_40 ": m84 40x
2.7182818284590452353602874713526624977572e0
   0j_40 ": 40 d85 2
1.4142135623730950488016887242096980785697e0

m83 exploits the fact that <.@o. produces extended integer results on extended integer arguments, and uses scaling to effect the desired computation.

m84 uses the reciprocal factorial power series to compute e, and produces extended precision results if given extended precision arguments.

d85 uses Newton's iteration to compute a rational approximation of the square root of integer y, accurate to x digits. The initial estimate is x:%:y, a rational approximation of the finite-precision square root of y. The number of iterations is the base-2 log of x-16, based on that the number of accurate digits doubles on every iteration and that the initial estimate has 16-digits of precision.

JPhrases/NumbersCounting (last edited 2010-02-14 18:07:57 by DevonMcCormick)