#include <stdio.h>
/* フィボナッチ数を求める関数(F₀ = F₁ = 1) */
double fib(int n) {
if (n <= 1) return 1.0;
double f0 = 1.0, f1 = 1.0, f;
for (int i = 2; i <= n; i++) {
f = f0 + f1;
f0 = f1;
f1 = f;
}
return f1;
}
/* n^k を求める関数(再帰やpowなしで実装) */
double power_nk(int n, int k) {
double result = 1.0;
for (int i = 0; i < k; i++) {
result *= n;
}
return result;
}
/* 絶対値を求める関数(fabs を使わずに)*/
double my_abs(double x) {
return (x < 0) ? -x : x;
}
/* メイン関数 */
int main(void) {
int k;
int best_n = 1;
double best_diff = my_abs(fib(1) - power_nk(1, k));
for (int n = 2; n <= 100; n++) {
double f = fib(n);
double p = power_nk(n, k);
double diff = my_abs(f - p);
if (diff < best_diff) {
best_diff = diff;
best_n = n;
}
}
printf("差 |F_n - n^k| が最小になる n = %d\n", best_n
); printf("F_%d = %.0f\n", best_n
, fib
(best_n
)); printf("%d^%d = %.0f\n", best_n
, k
, power_nk
(best_n
, k
)); printf("差 = %.0f\n", best_diff
);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgovKiDjg5XjgqPjg5zjg4rjg4Pjg4HmlbDjgpLmsYLjgoHjgovplqLmlbDvvIhG4oKAID0gRuKCgSA9IDHvvIkgKi8KZG91YmxlIGZpYihpbnQgbikgewogICAgaWYgKG4gPD0gMSkgcmV0dXJuIDEuMDsKCiAgICBkb3VibGUgZjAgPSAxLjAsIGYxID0gMS4wLCBmOwogICAgZm9yIChpbnQgaSA9IDI7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgZiA9IGYwICsgZjE7CiAgICAgICAgZjAgPSBmMTsKICAgICAgICBmMSA9IGY7CiAgICB9CiAgICByZXR1cm4gZjE7Cn0KCi8qIG5eayDjgpLmsYLjgoHjgovplqLmlbDvvIjlho3luLDjgoRwb3fjgarjgZfjgaflrp/oo4XvvIkgKi8KZG91YmxlIHBvd2VyX25rKGludCBuLCBpbnQgaykgewogICAgZG91YmxlIHJlc3VsdCA9IDEuMDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgazsgaSsrKSB7CiAgICAgICAgcmVzdWx0ICo9IG47CiAgICB9CiAgICByZXR1cm4gcmVzdWx0Owp9CgovKiDntbblr77lgKTjgpLmsYLjgoHjgovplqLmlbDvvIhmYWJzIOOCkuS9v+OCj+OBmuOBq++8iSovCmRvdWJsZSBteV9hYnMoZG91YmxlIHgpIHsKICAgIHJldHVybiAoeCA8IDApID8gLXggOiB4Owp9CgovKiDjg6HjgqTjg7PplqLmlbAgKi8KaW50IG1haW4odm9pZCkgewogICAgaW50IGs7CgogICAgcHJpbnRmKCLmlbTmlbAgayDjgpLlhaXlipvjgZfjgabjgY/jgaDjgZXjgYQ6ICIpOwogICAgc2NhbmYoIiVkIiwgJmspOwoKICAgIGludCBiZXN0X24gPSAxOwogICAgZG91YmxlIGJlc3RfZGlmZiA9IG15X2FicyhmaWIoMSkgLSBwb3dlcl9uaygxLCBrKSk7CgogICAgZm9yIChpbnQgbiA9IDI7IG4gPD0gMTAwOyBuKyspIHsKICAgICAgICBkb3VibGUgZiA9IGZpYihuKTsKICAgICAgICBkb3VibGUgcCA9IHBvd2VyX25rKG4sIGspOwogICAgICAgIGRvdWJsZSBkaWZmID0gbXlfYWJzKGYgLSBwKTsKCiAgICAgICAgaWYgKGRpZmYgPCBiZXN0X2RpZmYpIHsKICAgICAgICAgICAgYmVzdF9kaWZmID0gZGlmZjsKICAgICAgICAgICAgYmVzdF9uID0gbjsKICAgICAgICB9CiAgICB9CgogICAgcHJpbnRmKCJcbi0tLSDntZDmnpwgLS0tXG4iKTsKICAgIHByaW50Zigi5beuIHxGX24gLSBuXmt8IOOBjOacgOWwj+OBq+OBquOCiyBuID0gJWRcbiIsIGJlc3Rfbik7CiAgICBwcmludGYoIkZfJWQgID0gJS4wZlxuIiwgYmVzdF9uLCBmaWIoYmVzdF9uKSk7CiAgICBwcmludGYoIiVkXiVkID0gJS4wZlxuIiwgYmVzdF9uLCBrLCBwb3dlcl9uayhiZXN0X24sIGspKTsKICAgIHByaW50Zigi5beuICAgICA9ICUuMGZcbiIsIGJlc3RfZGlmZik7CgogICAgcmV0dXJuIDA7Cn0=