正整数のゲーデル数化?
Posted feedbacks - C++
とりあえずお題通りに(桁が変わると一意じゃないのを見越してタイトルに?が付いてるのと解釈)。 とりあえず解が出せるのは5桁までかな....6桁だと64bitでも溢れる気がする。 桁数が少ないので素数は計算せず。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <complex>
static unsigned int prime[] = {2, 3, 5, 7, 11};
unsigned int digit(unsigned int n, unsigned int base)
{
unsigned d = 1;
for (; n > (base - 1); n /= base) { d++; }
return d;
}
unsigned long long goedel(unsigned int n)
{
unsigned long long ans = 1;
for (unsinged int d = digit(n, 10); d > 0; d--, n /= 10)
ans *= (unsigned long long)std::pow((double)prime[d - 1], (int)(n % 10));
return ans;
}
|


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