challenge 正整数のゲーデル数化?

正の整数 n を引数としてとり, 2^d1 * 3^d2 * 5^d3 ... * pk^dk を返す関数
goedel を定義してください.

ただし,n を10進表現で k 桁の数としたときの各桁の数が数列 [d1,d2,d3,...,dk]
をなすとし,dk が 1 の位,d1 が 10^(k-1) の位です.また,pk は k番目の素数です.

goedel   9  ⇒ 2^9             ⇒  512
goedel  81  ⇒ 2^8 * 3^1       ⇒  768
goedel 230  ⇒ 2^2 * 3^3 * 5^0 ⇒  108

Posted feedbacks - J

j言語です。
   goedel=.3 :'*/x:(p:i.#":y)^"."0":y'
   goedel 9
512
   goedel 81
768
   goedel 230
108
   goedel 12345
870037764750
   goedel 123456789
52713275010243038997421106186697438702252144407250


#4657の提案(goedel2)と#4661の提案(goedel3)もやってみました。
   goedel2=.3 :'*/x:(p:i.#":y)^>:"."0":y'
   goedel2 230
3240
   goedel2 23
648

   goedel3=.3 :'*/x:(p:i.#":y)^|."."0":y'
   goedel3 230
675
   goedel3 23
72
1
goedel=.3 :'*/x:(p:i.#":y)^"."0":y'

Index

Feed

Other

Link

Pathtraq

loading...