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 - なでしこ

仕様通りに組んでみました

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
!変数宣言が必要
●CPrime(N)
    PrimeListとは配列=2
    Flagとは整数=0
    Mとは整数=2
    Iとは整数
    (要素数(PrimeList)<N)の間
        Iで2からINT(SQRT(M))+1まで繰り返す
            もし(M%I=0)ならば
                Flag=1
                抜ける
        もし(Flag=0)ならば
            PrimeListにMを配列追加
        Flag=0
        M=M+1
    PrimeListで戻る
●goedel(N)
    TMPとは整数=1
    NListとは配列=文字列分解(TOSTR(N))
    PrimeListとは配列=CPrime(N)
    PrimeListを反復
        TMP=TMP*(対象^NList[回数-1])
    TMPで戻る

goedel(9)を表示
goedel(81)を表示
goedel(230)を表示

Index

Feed

Other

Link

Pathtraq

loading...