fork download
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. int main() {
  7. const int MOD = 1000000;
  8. vector<int> p;
  9. p.push_back(1); // p[0] = 1
  10.  
  11. int n = 1;
  12. while (true) {
  13. int sum = 0;
  14. int i = 0; // Để đếm số hạng k (1, -1, 2, -2...)
  15.  
  16. while (true) {
  17. // Sinh k theo thứ tự: 1, -1, 2, -2, 3, -3...
  18. // i=0 -> k=1; i=1 -> k=-1; i=2 -> k=2...
  19. int k = (i % 2 == 0) ? (i / 2 + 1) : -(i / 2 + 1);
  20.  
  21. // Số ngũ giác tổng quát
  22. int gk = k * (3 * k - 1) / 2;
  23.  
  24. // Nếu chỉ số vượt quá n thì dừng (không còn quá khứ để tham chiếu)
  25. if (gk > n) break;
  26.  
  27. // Xác định dấu: +, +, -, -, +, +...
  28. // Nhóm 2 số đầu là +, nhóm 2 số sau là -
  29. // i chạy 0, 1 (k=1, -1) -> Dấu +
  30. // i chạy 2, 3 (k=2, -2) -> Dấu -
  31. // i/2 chẵn -> cộng; i/2 lẻ -> trừ
  32.  
  33. if ((i / 2) % 2 == 0) {
  34. sum = (sum + p[n - gk]) % MOD;
  35. } else {
  36. sum = (sum - p[n - gk]);
  37. // Xử lý số âm trong modulo
  38. while (sum < 0) sum += MOD;
  39. sum %= MOD;
  40. }
  41.  
  42. i++;
  43. }
  44.  
  45. p.push_back(sum);
  46.  
  47. // Kiểm tra điều kiện bài toán
  48. if (sum == 0) {
  49. cout << "Tim thay n = " << n << endl;
  50. break;
  51. }
  52.  
  53. n++;
  54. }
  55.  
  56. return 0;
  57. }
  58.  
Success #stdin #stdout 0.1s 5316KB
stdin
Standard input is empty
stdout
Tim thay n = 55374