数学の散歩道(Jと整数論)(エジプト分数 素数など)

出典: 山下 紀幸 JAPLA 2000
論文:数学の散歩道(Jと整数論)
PDF
Script
yamashita_2.ijs(J8)
オリジナル(J4)
  1. 幾つかの整数論の小品がフォートランスタイルのJコードで書かれている。
  2. PDFからソースコードを引き抜いたとき、フォントに相違が出る(’^)(直してある)

エジプト分数

Example
   greedy2 4 17
5
29
1233
3039345
Script
wr=: 1!:2&2

greedy2=: 3 : 0
'p q'=.y
while. p>1 do.
m0=.>.q%p
wr m0
r =.(p*m0)-q[s=.q*m0
if. r=1 do. wr s end.
p =.r[q=.s
end.
''
)

因数分解

試し割り算  
Examples
    bunkai 71489
11 6499
67 1067
97 737
Script
bunkai=: 3 : 0
n0=.y [d=.2
while. d<<.%:n0
do.
if. (d|n0)=0 do. wr d,n0%d end.
d=.d+1
end.
''
)
素因数分解
Examples
   soin 71489
11
67
97
Jのq:
   q: 71489
11 67 97
Script
soin=: 3 : 0
n0=.y
label_1. b=.2
label_2. if. b>%:n0+1 do. goto_4. end.
if. (n0-(<.n0%b)*b)=0 do. goto_3. end.
b=.b+1
goto_2.
label_3. wr b
n0=.n0%b
goto_1.
label_4. n0
)

数学パズル

  1. 連続する2桁の整数で,その平方数が数字の位置だけが異なっている組として, \(132^{2} = 169, 142^{2} = 196 \) が ある.ところで連続する整数で,その平方数が数字の位置だけが異なっている組が3桁では2組ある.それは どのような整数か.
    Example
       puzz31 100 999
    157 158 24649 24964
    913 914 833569 835396
    
    Script
    puzz31=: 3 : 0
    'p q'=. y 
    while. p<:q do.
     'a0 a1 a2 a3'=.(4#10)#:p^2
     a5=.10#.a4/:a4=.a0,a1,a2,a3
     'b0 b1 b2 b3'=.(4#10)#:(p+1)^2
     b5=.10#.b4/:b4=.b0,b1,b2,b3
      if. a5=b5 do. wr p,(p+1),(p^2),(p+1)^2 end.
    p=.p+1
    end.
    ''
    )
    
  2. \(3^{4} \times 7^{2} \) の式に出る数字を順に書けば3472 となるが, 勿論この計算の答ではない.しかし,ある累乗数の積 が偶然にも,この式に出る数字を順に並べた4桁の数となる場合,この数を累乗再現数という. このような数はあるのだろうか.
    Example
         math141 1000 9999
    2 5 9 2 2592
    
    \( (2^{5}) \times 9^{2}=2592 \)
    Script
      math141=: 3 : 0
    'p q' =. y 
    while. p<:q do.
     'c0 c1 c2 c3'=.(4#10)#:p
       if. ((c0^c1)*c2^c3)=p do. wr c0,c1,c2,c3,p end.
     p=.p+1
    end.
    ''
    )
    
  3. ある数がある.それからそのひっくり返した数を引いても, 出てきた答はもとの数と同じ数字で構成されて いる.もっとも,各数字の順序の順序は変わっている.たとえば次の引き算を見ていただきたい. このような数は4桁数にあるだろうか. \[ \begin{array}{r} 954\\ -459\\ \hline 495\\ \end{array} \]
       math144 1000 9999
    2961 1692 1269
    5823 3285 2538
    7641 1467 6174
    9108 8019 1089
    
    Script
    
    math144=: 3 : 0
    'p q' =. y
    while. p<:q do.
     'a0 a1 a2 a3'=.(4#10)#:p
       if. a3=0 do. goto_1. end.
     a4=.a0,a1,a2,a3
       if. (#^.a4)<#a4 do. goto_1. end.
     a5=.10#.|.a4
     a6=.p-a5
       if. a6<0 do. goto_1. end.
     'a7 a8 a9 a10'=.(4#10)#:a6
     a12=.10#.a11/:a11=.a7,a8,a9,a10
     a13=.10#.a4/:a4
       if. a12=a13 do. wr p,a5,a6 end.
     label_1. p=.p+1
    end.
    ''
    )