fork download
  1. #include <iostream>
  2. #include <algorithm>
  3.  
  4. using namespace std;
  5.  
  6. const int n = 5000;
  7. const int m = 5;
  8. const int Dmax = n + 100;
  9.  
  10. int D, itor[Dmax] = {}, rtoi[Dmax];
  11. long long d[n];
  12. int A[n], B[n], p[n];
  13.  
  14. int main(void)
  15. {
  16. int a, b, i, j, k, r, ra, rb;
  17.  
  18. for (D = n + 1; D <= Dmax; D++) {
  19. fill(rtoi, rtoi + D, 0);
  20. for (i = 1; i <= n; i++) {
  21. r = (long long)i * i * i % D;
  22. if (rtoi[r]) break; else rtoi[r] = i;
  23. }
  24. if (i > n) break;
  25. }
  26. if (D > Dmax) return cout << "D not found." << endl, -1;
  27. for (r = 0; r < D; r++) itor[rtoi[r]] = r;
  28.  
  29. for (r = 1; r < D; r++) {
  30. for (k = 0, a = 2; a <= n; a++) {
  31. ra = itor[a];
  32. if ((rb = ra - r) < 0) rb += D;
  33. if (b = rtoi[rb], b == 0 || b >= a) continue;
  34. d[k] = (long long)a * a * a - (long long)b * b * b;
  35. A[k] = a;
  36. B[k] = b;
  37. p[k] = k;
  38. k++;
  39. }
  40. sort(p, p + k, [](int x, int y) {return d[x] < d[y];});
  41.  
  42. for (i = 0; i < k - m + 1; i++) {
  43. if (d[p[i]] != d[p[i + m - 1]]) continue;
  44.  
  45. cout << d[p[i]] << ": ";
  46. for (j = i + m; j < k && d[p[j]] == d[p[i]]; j++);
  47. sort(p + i, p + j, [](int x, int y) {return A[x] < A[y];});
  48. for_each(p + i, p + j, [&](int &x) {
  49. cout << (&x > p + i ? ", (" : "(") << A[x] << ", " << B[x] << ")";
  50. });
  51. cout << endl;
  52. i = j - 1;
  53. }
  54. }
  55. return 0;
  56. }
Success #stdin #stdout 0.67s 5304KB
stdin
Standard input is empty
stdout
1412774811: (1134, 357), (1155, 504), (1246, 805), (2115, 2004), (4746, 4725)