Problem 119

512は各桁の和(8)を3乗した値に等しい(8^3 = 512).
各桁の和を何乗かするとその値になる性質を持つ数としては,他に614656 = 28^4などがある.
この性質を持つ値を小さいものから並べた数列の第n項をa_nとする.またa_nは2桁以上の整数とする.
a_2 = 512で,a_10 = 614656である.a_30を求めよ.
gmpがなかったら生きていけない.50ms.

続きを読む

S3クラスによるメソッド定義?

なんか前の(S3クラスによるメソッド定義 - もうカツ丼でいいよな)はどうも違う.
そもそも汎用関数がクラスを判別して適切なメソッドへオブジェクトを引き渡すためには関数UseMethodを使う.この時別に汎用関数で指定された引数がオブジェクトのメソッドで使用されなくても何の問題も起きない.

> fun <- function(..., x="hoge") UseMethod("fun")
> fun.character <- function(...) print(...)
> fun("piyo")
[1] "piyo"

大抵の汎用関数は多少の差はあれUseMethodを呼び出している.

> mean
function (x, ...) 
UseMethod("mean")
<environment: namespace:base>
> print
function (x, ...) 
UseMethod("print")
<environment: namespace:base>
> sort
function (x, decreasing = FALSE, ...) 
{
    if (!is.logical(decreasing) || length(decreasing) != 1L) 
        stop("'decreasing' must be a length-1 logical vector.\nDid you intend to set 'partial'?")
    UseMethod("sort")
}
<environment: namespace:base>

ただsumは.Primitiveで内部関数を呼び出していて

> sum
function (..., na.rm = FALSE)  .Primitive("sum")

どうも.Primitive使ってる関係で引数の取り扱いがアレなんじゃないかと思ったりしたけど結局良く分からない.

あたりを見てもイマイチなんのことやらなのでもう寝る.