正整数のゲーデル数化?
Posted feedbacks - Smalltalk
Squeak Smalltalk で。
指定した数未満の素数列を生成する、組み込みの Integer class>>#primesUpTo: を流用して富豪的に。
指定した数未満の素数列を生成する、組み込みの Integer class>>#primesUpTo: を流用して富豪的に。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | | primesOfSize goedel |
primesOfSize := [:n |
| m primes |
m := 0.
[(primes := Integer primesUpTo: (10 raisedTo: (m := m + 1))) size >= n] whileFalse.
primes first: n].
goedel := [:num |
| digits size |
digits := (num asString as: Array) collect: [:char | char asString asInteger].
size := digits size.
primes := primesOfSize value: size.
(1 to: size) inject: 1 into: [:goe :idx | goe * ((primes at: idx) raisedTo: (digits at: idx))]].
goedel value: 9. "=> 512 "
goedel value: 81. "=> 768 "
goedel value: 230. "=> 108 "
|


nobsun
#4420()
Rating2/2=1.00
see: ゲーデル数
[ reply ]