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 - PHP

素数を作るところをもっとなんとかしたい・・・。 とりあえず出来たのでUP。

 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
<?php
function prime($len)
{
    $result = array(2);
    for($n = 2; $n <= $len; $n++) {
        if($n % 2 == 0) {
            continue;
        }
        for($i = 3 ; pow($i, 2) <= $n ; $i += 2) {
            if($n % $i == 0)
                continue 2;
        }
        array_push($result, $n);
    }
    return $result;
}

function goedel($n)
{
    $n = strval($n);
    $result = 1;
    $prime = prime($n);
    for($i = 0; $i < strlen($n); $i++) {
        $result *= pow($prime[$i], $n[$i]);
    }
    return $result;
}

Index

Feed

Other

Link

Pathtraq

loading...