任意の底の対数を計算
競技プログラミングというか、ほとんど高校数学の話ではあるが…
解いた問題のことを書きたいが、気力がないので、簡単な話でお茶を濁しておく。
任意の底の対数を計算したいが、C++ ではそのような関数は用意されておらず、底の変換公式に従って計算する必要がある。
例えば、 を計算したい時、
という等式を用いて計算する。(自然対数の底 は省略)
数学はほとんど忘却の彼方なので、こんなんあったなあという感じである。
え、公式は覚えるものではないって?
それはそうなんだけど、頭の中で導出できるほどの頭は持ち合わせていないし、紙に書いて導出する気力もない。
あと、注意することとしては、 のときは実行できない点である。
となってしまい、ゼロ除算をしてしまうになるのでいけない。
そもそも底の条件に ではないというのあったわ。
この操作が必要な問題を解いてるときに、少し詰まってしまった。
ゼロ除算を許すな。
// A != 1 double calc_log(double A, double B){ return log(B) / log(A); }
【雑記】
最近 Union-Find を連想配列で実装したりしていたが、なんか使いどころなさそうなんだよなあ…
これを使って解いた問題の解説見たら、DancingLinks とか書いてあって知らんって感じだった。
分不相応な問題解いてばかりいる気がするが、力ついてるんかなあ…