fork download
  1. #include <iostream>
  2. #include <utility>
  3.  
  4. template <typename T>
  5. inline std::pair<T, T> fib_step(const std::pair<T, T>& n) {
  6. return std::make_pair(n.first + n.second, n.first);
  7. }
  8.  
  9. template <typename T>
  10. T find_largest_factor(T target) {
  11. auto divisor = T(1);
  12. auto fibs = std::make_pair(T(2), T(1));
  13. while (fibs.first < target) {
  14. fibs = fib_step(fibs);
  15. if (target % fibs.first == 0) divisor = fibs.first;
  16. }
  17. return target / divisor;
  18. }
  19.  
  20. template <typename T>
  21. void print_fibonacciish(T target) {
  22. if (target == T(0)) { // special case
  23. std::cout << "0\n";
  24. return;
  25. }
  26. auto start = find_largest_factor(target);
  27. auto fibs = std::make_pair(start, T(0));
  28. std::cout << "0 " << start;
  29. while (fibs.first < target) {
  30. fibs = fib_step(fibs);
  31. std::cout << ' ' << fibs.first;
  32. }
  33. std::cout << '\n';
  34. }
  35.  
  36. int main() {
  37. // regular inputs
  38. print_fibonacciish(21);
  39. print_fibonacciish(84);
  40.  
  41. // challenge inputs
  42. print_fibonacciish(0);
  43. print_fibonacciish(578);
  44. print_fibonacciish(123456789);
  45.  
  46. // /u/Blackshell's input
  47. print_fibonacciish(38695577906193299L);
  48.  
  49. return 0;
  50. }
Success #stdin #stdout 0s 3456KB
stdin
Standard input is empty
stdout
0 1 1 2 3 5 8 13 21
0 4 4 8 12 20 32 52 84
0
0 17 17 34 51 85 136 221 357 578
0 41152263 41152263 82304526 123456789
0 7 7 14 21 35 56 91 147 238 385 623 1008 1631 2639 4270 6909 11179 18088 29267 47355 76622 123977 200599 324576 525175 849751 1374926 2224677 3599603 5824280 9423883 15248163 24672046 39920209 64592255 104512464 169104719 273617183 442721902 716339085 1159060987 1875400072 3034461059 4909861131 7944322190 12854183321 20798505511 33652688832 54451194343 88103883175 142555077518 230658960693 373214038211 603872998904 977087037115 1580960036019 2558047073134 4139007109153 6697054182287 10836061291440 17533115473727 28369176765167 45902292238894 74271469004061 120173761242955 194445230247016 314618991489971 509064221736987 823683213226958 1332747434963945 2156430648190903 3489178083154848 5645608731345751 9134786814500599 14780395545846350 23915182360346949 38695577906193299