fork download
  1. #include <bits/stdc++.h>
  2. #include <unordered_map>
  3.  
  4. using namespace std;
  5.  
  6. unordered_map <unsigned long long, unsigned long long> nums;
  7.  
  8. unsigned long long f(unsigned long long n) {
  9. if (n < 3) {
  10. return 1;
  11. }
  12. else if (nums.count(n) > 0) {
  13. return nums[n];
  14. }
  15. else if (n % 2 == 0) {
  16. unsigned long long temp1 = f(n - 1) + f(n - 3);
  17. nums[n] = temp1;
  18. return temp1;
  19. }
  20. else {
  21. unsigned long long temp2 = f(6 * n / 7) + f(2 * n / 3);
  22. nums[n] = temp2;
  23. return temp2;
  24. }
  25. }
  26.  
  27. int main() {
  28. unsigned long long n;
  29. cin >> n;
  30. cout << f(n);
  31. }
Success #stdin #stdout 0.01s 5316KB
stdin
5000000
stdout
13298120593038310774