找回密码
 欢迎注册
查看: 218|回复: 19

[擂台] 把二进制数看成十进制数后再转成二进制

[复制链接]
发表于 7 天前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
10 转化成二进制是 1010

1010 转化成二进制是 1111110010

1111110010 转化成二进制是 1000010001110100011000101111010

1000010001110100011000101111010 转化成二进制是 1100100111110011010011100010101000011000101001000100011011011010001111011100010000001000010011100010

再继续转化下去,贴子很快就写不下了

但这些数字的位数还是写得下的,结果如下:

2, 4, 10, 31, 100, 330, 1093, 3628, 12049, 40023, 132951, 441651, 1467130, 4873698, 16190071, 53782249, 178660761, 593498199, 1971558339

Michael S. Branicky 在2026年1月8日把这个数列又延长了3项:

6549375034, 21756552927, 72273704413

我感觉继续延长下去(比如算出前10000项,做成一个b-file)也没啥难度啊,是不是我想错了?

求这些数字的位数到底难在哪?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 7 天前 来自手机 | 显示全部楼层
不知道你准备采用多少位精度进行计算,显然我们只能使用一定精度反复计算这个序列各项的上下界,直到上下界位数不同,无法继续下去了。
后面就牵涉到如何快速把一个浮点10进制数转化为二进制的问题。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 6 天前 | 显示全部楼层
试着保留100位小数求上下界,看能求几项
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 5 天前 | 显示全部楼层
中间部分{330, 1093, 3628, 12049, 40023, 132951, 441651, 1467130, 4873698, 16190071, 53782249, 178660761, 593498199, 1971558339, 6549375034, 21756552927, 72273704413}可以有。

  1. NestList[Ceiling[Log[2, 10] (# - 1)] &, 330, 16]
复制代码


毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 5 天前 | 显示全部楼层
中间部分可以有。后面部分也可以有。
72273704413, 240088049208, 797555235908, 2649421145384, 8801186538037, 29236908829047, 97122908846869, 322635319555596, 1071771332434694, 3560347300509670, 11827217725119449, 39289166845424092}

  1. NestList[Ceiling[Log[2, 10] (# - 1)] &, 330, 36]
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 5 天前 | 显示全部楼层
还是主帖这串数。

a(1)=10,—— b(1)=1,——"1"的个数。
a(2)=1010, —— b(2)=2,——"1"的个数。
a(3)=1111110010, —— b(3)=7,——"1"的个数。
a(4)=1000010001110100011000101111010, —— b(4)=14,——"1"的个数。
a(5)=1100100111110011010011100010101000011000101001000100011011011010001111011100010000001000010011100010, —— b(5)=44,——"1"的个数。
a(6)=100000001100001000000000010010101010011000111101111110011111000011101110101110101111010001000100110001100001101010111111001011110010101010100001010110110011010101011
010110011111000000111111100101110101100010110001000010010000111011100000001011011101010000001110010010011001011100011000001000110100001000111101110111100001101101010,—— b(6)=158,

得到一串数——{1, 2, 7, 14, 44, 158, 535, 1821, 6092, 20000, 66378, 220957, 733556, 2436430, 8095687, 26892148, 89338832, 296769545, 985760656}

代码是这样——DigitCount[NestList[FromDigits[IntegerDigits[#, 2]] &, 2, 16], 2, 1]

985760656——后面的我这里来不了——各位!可有好方法?谢谢各位好友!!!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 4 天前 | 显示全部楼层
本帖最后由 王守恩 于 2026-4-14 08:30 编辑

一般地。a(1)=把A进制 K 写成B进制。a(2)=把A进制a(1)写成B进制。a(3)=把A进制a(2)写成B进制。——要求:  K ≥ A,  B > A。

代码(1)——NestList[FromDigits[IntegerDigits[#, B], A] &, K, n]——显示的是10进制数的a(n)。

代码(2)——IntegerLength[ NestList[FromDigits[IntegerDigits[#, B], A] &, K, n]]——显示的是10制数a(n)的位数。——可惜 4# 那么"速度快"的代码找不到了?不管B, A, K怎么变化。——为什么???
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 4 天前 | 显示全部楼层
我还是觉得没啥难度呀,机器精度完全足够复现Michael S. Branicky的结果,而且还能继续延长3~5项:
  1. #include<cmath>
  2. #include<cstdio>
  3. double a,b,d,f,g,h;
  4. long long e;
  5. int main()
  6. {
  7.         a=e=1;
  8.         while(e<1e16)
  9.         {
  10.                 printf("%lld, ",e+1);
  11.                 b=(log(a)+log(10)*e)/log(2);
  12.                 d=exp(log(2)*(long long)(b)-log(10)*e);
  13.                 for(f=0,g=1;g>2e-18;a*=2,g/=10)
  14.                         if(a>=d)a-=d,f+=g;
  15.                 e=(long long)(b);
  16.                 a=f;
  17.         }
  18.         return 0;
  19. }
复制代码

运行结果:
  1. 2, 4, 10, 31, 100, 330, 1093, 3628, 12049, 40023, 132951, 441651, 1467130, 4873698, 16190071, 53782249,
  2. 178660761, 593498199, 1971558339, 6549375034, 21756552927, 72273704413, 240088049208, 797555235908,
  3. 2649421145384, 8801186538037, 29236908829047, 97122908846869, 322635319555596, 1071771332434694,
  4. 3560347300509671
复制代码

你们可以改成高精度,验一下上面的数列到了哪一项就不一致了。

#####

根据楼下的数据,上面的输出从 3560347300509671 开始就不一致了,楼下的这一项是 3560347300509670,相差了1

评分

参与人数 1威望 +8 金币 +8 贡献 +8 经验 +8 鲜花 +8 收起 理由
northwolves + 8 + 8 + 8 + 8 + 8 赞一个!

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 4 天前 | 显示全部楼层
本帖最后由 王守恩 于 2026-4-14 09:27 编辑

NestList[Ceiling[Log[2, 10] (# - 1)] &, 330, 30]——我没有添加精度——就不知道后面是不是正确的。
{330, 1093, 3628, 12049, 40023, 132951, 441651, 1467130, 4873698, 16190071, 53782249, 178660761, 593498199, 1971558339, 6549375034, 21756552927, 72273704413, 240088049208, 797555235908, 2649421145384,
8801186538037, 29236908829047, 97122908846869, 322635319555596, 1071771332434694, 3560347300509670, 11827217725119449, 39289166845424092, 130515787168531371, 433564060221483867, 1440268632583183540}
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 4 天前 | 显示全部楼层
我用python搞成高精度了,和你上面的输出是一致的:
  1. from decimal import Decimal, getcontext
  2. getcontext().prec = 200
  3. ln2 = Decimal(2).ln()
  4. ln10 = Decimal(10).ln()
  5. a = Decimal(1)
  6. e = 1
  7. while e < 10**200:
  8.     print(e + 1)
  9.     b = (a.ln() + ln10 * e) / ln2
  10.     ll_b = int(b)
  11.     d = (ln2 * ll_b - ln10 * e).exp()
  12.     f = Decimal(0)
  13.     g = Decimal(1)
  14.     while g > Decimal('1e-200'):
  15.         if a >= d:
  16.             a -= d
  17.             f += g
  18.         a *= 2
  19.         g /= 10
  20.     e = ll_b
  21.     a = f
复制代码

输出结果:
  1. 2
  2. 4
  3. 10
  4. 31
  5. 100
  6. 330
  7. 1093
  8. 3628
  9. 12049
  10. 40023
  11. 132951
  12. 441651
  13. 1467130
  14. 4873698
  15. 16190071
  16. 53782249
  17. 178660761
  18. 593498199
  19. 1971558339
  20. 6549375034
  21. 21756552927
  22. 72273704413
  23. 240088049208
  24. 797555235908
  25. 2649421145384
  26. 8801186538037
  27. 29236908829047
  28. 97122908846869
  29. 322635319555596
  30. 1071771332434694
  31. 3560347300509670
  32. 11827217725119449
  33. 39289166845424092
  34. 130515787168531371
  35. 433564060221483867
  36. 1440268632583183540
  37. 4784468834763081346
  38. 15893661441312481253
  39. 52797600472523900437
  40. 175389832352315422663
  41. 582632411648741041920
  42. 1935462977247931791628
  43. 6429468840734244393709
  44. 21358233177237966605394
  45. 70950514848622174528405
  46. 235692508622360974195958
  47. 782953566147102814617343
  48. 2600915448376311691313555
  49. 8640054100387830930358540
  50. 28701638457425090555526915
  51. 95344779161019984506204705
  52. 316728500595823403320105922
  53. 1052149304580814448477908456
  54. 3495164334903208087022834978
  55. 11610684600363268945421466506
  56. 38569859374822790062833434036
  57. 128126299473078543553061211470
  58. 425626353913571464421883265664
  59. 1413900142989964696264005783930
  60. 4696874608363622635125333090739
  61. 15602679719686195079367186445692
  62. 51830980116354846807243775876948
  63. 172178789034067414690517780784713
  64. 571965556635952642441117800893573
  65. 1900028451896859912616119061868242
  66. 6311757895441520242197476841126773
  67. 20967205880994316931913496148453578
  68. 69651550287362551109302814460006892
  69. 231377441752049594889305539409373676
  70. 768619224279297761301429695197554357
  71. 2553297795403929895333266596592231186
  72. 8481871681166279123855799525570355179
  73. 28176167834895766876316768911980670971
  74. 93599203537001871992072580403011500692
  75. 310929823888647096110443538025101616976
  76. 1032886517514076534769535336563643989211
  77. 3431174741360378486581976013937370470782
  78. 11398115771792920347496749624773547264762
  79. 37863721011097653625209578965518810993919
  80. 125780558603742221730579006039251371534748
  81. 417833971416397631699844703911091523672437
  82. 1388014408646494398914813637734187755502531
  83. 4610884060191257982903148807363210375587741
  84. 15317025301817651812016887641541245247670583
  85. 50882056680208638353658905458969865362552195
  86. 169026533611636270808726034057784938832697784
  87. 561493990785917595026902136962363841355889628
  88. 1865242663102165424467648235958100379086760371
  89. 6196202006341606624652740411386965636202930515
  90. 20583337526463625567756523300038324289833112059
  91. 68376367215708864957117111269115914940522281633
  92. 227141375280198450377273991755786428149468480129
  93. 754547316054645058270661604048909995453694991762
  94. 2506551928123779536221075647247613569800780341361
  95. 8326585271328471754833874947333005225387668726193
  96. 27660317547301361280576582937658230939432617338008
  97. 91885585973886290244003098628617978986426801829209
  98. 305237309561841027228219838342591757178168112672788
  99. 1013976394241310634381657187277255878939640732316800
  100. 3368356671582794085612439374526108332355234067825378
复制代码
后面的输出太长了,我把他截断了,只保留了前100行
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2026-4-18 18:10 , Processed in 0.031324 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表