prog.cpp 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. // Least k such that A296062(k) = n.
  2. // https://oeis.org/A325944
  3. // Known terms:
  4. // 0, 2, 4, 8, 9, 10, 17, 128, 18, 512, 20, 34, 35, 8192, 66, 36, 37, 38, 1025, 40, 41, 42, 69, 514, 70, 132, 1026
  5. // Upper-bound: a(n) <= 2^n
  6. // It's very likely that a(27) = 2^27
  7. // Further terms of the sequence (with question marks where unknown):
  8. // a(28) = 72
  9. // a(29) = 2050
  10. // a(30) = 73
  11. // a(31) = 134
  12. // a(32) = 74
  13. // a(33) = ?
  14. // a(34) = 76
  15. // a(35) = 516
  16. // a(36) = 80
  17. // a(37) = 136
  18. // a(38) = 81
  19. // a(39) = ?
  20. // a(40) = 82
  21. // a(41) = 32770
  22. // a(42) = 84
  23. // a(43) = 138
  24. // a(44) = 139
  25. // a(45) = 518
  26. // a(46) = 264
  27. // a(47) = 140
  28. // a(48) = 141
  29. // a(49) = 142
  30. // a(50) = 265
  31. // a(51) = ?
  32. // a(52) = 1030
  33. // a(53) = 144
  34. // a(54) = 266
  35. // a(55) = 520
  36. // a(56) = 145
  37. // a(57) = ?
  38. // a(58) = 4101
  39. // a(59) = 146
  40. // a(60) = 147
  41. // Probably all a(n) with question marks above, are a(n) = 2^n.
  42. // Compilation:
  43. // g++ -march=native -Ofast prog.cpp -o compiled
  44. #include <map>
  45. #include <iostream>
  46. using namespace std;
  47. map <unsigned int, unsigned int> cache = {};
  48. unsigned int a(unsigned int n) {
  49. if (n <= 1) {
  50. return 0;
  51. }
  52. if (cache.find(n) != cache.end()) {
  53. return cache[n];
  54. }
  55. auto t = (n & 1) ? (a((n-1) >> 1) << 1) : (a(n >> 1) + a((n >> 1)-1) + 1);
  56. cache[n] = t;
  57. return t;
  58. }
  59. unsigned int f(unsigned int n) {
  60. for (unsigned int k = 1; ; ++k) {
  61. if (a(k) == n) {
  62. return k;
  63. }
  64. }
  65. }
  66. int main(int argc, char **argv) {
  67. for (int n = 1; n <= 1000; ++n) {
  68. cout << "a(" << n << ") = " << f(n) << endl;
  69. }
  70. }