fork download
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <limits.h>
  4.  
  5. // フィボナッチ数を求める関数
  6. unsigned long long fib(int n) {
  7. if (n == 0 || n == 1)
  8. return 1;
  9.  
  10. unsigned long long f0 = 1, f1 = 1, fn;
  11. for (int i = 2; i <= n; i++) {
  12. fn = f0 + f1;
  13. f0 = f1;
  14. f1 = fn;
  15. }
  16. return fn;
  17. }
  18.  
  19. // nのk乗を求める関数
  20. unsigned long long power(int n, int k) {
  21. unsigned long long result = 1;
  22. for (int i = 0; i < k; i++) {
  23. result *= n;
  24. }
  25. return result;
  26. }
  27.  
  28. int main(void) {
  29. int k;
  30. printf("整数kを入力してください:");
  31. scanf("%d", &k);
  32.  
  33. int min_n = 1;
  34. unsigned long long min_diff = ULLONG_MAX;
  35.  
  36. for (int n = 1; n <= 100; n++) {
  37. unsigned long long fn = fib(n);
  38. unsigned long long nk = power(n, k);
  39.  
  40. unsigned long long diff = fn > nk ? fn - nk : nk - fn;
  41.  
  42. if (diff < min_diff) {
  43. min_diff = diff;
  44. min_n = n;
  45. }
  46. }
  47.  
  48. printf("fnとn^kの差が最小になるnは:%d\n", min_n);
  49. return 0;
  50. }
  51.  
Success #stdin #stdout 0s 5280KB
stdin
43
stdout
整数kを入力してください:fnとn^kの差が最小になるnは:1