fork download
  1. #include <iostream>
  2. #include <cstdint>
  3. using namespace std;
  4.  
  5. uint64_t sequence(uint64_t A, uint64_t B, size_t n) {
  6. if (n == 0) {
  7. return A;
  8. }
  9. uint64_t prev[2] = {A, B};
  10. for (size_t it = 1u; it < n; ++it) {
  11. uint64_t next =
  12. (prev[0] > prev[1]) ?
  13. (prev[0] - prev[1]) :
  14. (prev[1] - prev[0]);
  15. if (next == 0) {
  16. size_t remaining = n - it - 1;
  17. if (remaining % 3 == 0) {
  18. return 0;
  19. }
  20. return prev[0];
  21. }
  22. prev[0] = prev[1];
  23. prev[1] = next;
  24. }
  25. return prev[1];
  26. }
  27.  
  28. uint64_t sequence_control(uint64_t A, uint64_t B, size_t n) {
  29. if (n == 0) {
  30. return A;
  31. }
  32. uint64_t prev[2] = {A, B};
  33. for (size_t it = 1u; it < n; ++it) {
  34. uint64_t next =
  35. (prev[0] > prev[1]) ?
  36. (prev[0] - prev[1]) :
  37. (prev[1] - prev[0]);
  38. prev[0] = prev[1];
  39. prev[1] = next;
  40. }
  41. return prev[1];
  42. }
  43.  
  44.  
  45. int main(int, char **) {
  46. uint64_t a = 211;
  47. uint64_t b = 9935;
  48. for (size_t n = 0; n < 10000; ++n) {
  49. auto s = sequence(a,b,n);
  50. auto c = sequence_control(a,b,n);
  51. if (c != s) {
  52. cout << a << "|" << b << " " << n << ": c = " << c << " s = " << s << endl;
  53. }
  54. }
  55. return 0;
  56. }
Success #stdin #stdout 0.14s 3136KB
stdin
Standard input is empty
stdout
Standard output is empty