KeyTo9_Fans 发表于 2026-4-11 16:01:50

把二进制数看成十进制数后再转成二进制

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)也没啥难度啊,是不是我想错了?

求这些数字的位数到底难在哪?

mathe 发表于 2026-4-11 17:39:37

不知道你准备采用多少位精度进行计算,显然我们只能使用一定精度反复计算这个序列各项的上下界,直到上下界位数不同,无法继续下去了。
后面就牵涉到如何快速把一个浮点10进制数转化为二进制的问题。

l4m2 发表于 2026-4-12 20:26:29

试着保留100位小数求上下界,看能求几项

王守恩 发表于 7 天前

中间部分{330, 1093, 3628, 12049, 40023, 132951, 441651, 1467130, 4873698, 16190071, 53782249, 178660761, 593498199, 1971558339, 6549375034, 21756552927, 72273704413}可以有。

NestList (# - 1)] &, 330, 16]

王守恩 发表于 7 天前

中间部分可以有。后面部分也可以有。
72273704413, 240088049208, 797555235908, 2649421145384, 8801186538037, 29236908829047, 97122908846869, 322635319555596, 1071771332434694, 3560347300509670, 11827217725119449, 39289166845424092}

NestList (# - 1)] &, 330, 36]

王守恩 发表于 7 天前

还是主帖这串数。

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] &, 2, 16], 2, 1]

985760656——后面的我这里来不了——各位!可有好方法?谢谢各位好友!!!

王守恩 发表于 6 天前

本帖最后由 王守恩 于 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, A] &, K, n]——显示的是10进制数的a(n)。

代码(2)——IntegerLength[ NestList, A] &, K, n]]——显示的是10制数a(n)的位数。——可惜 4# 那么"速度快"的代码找不到了?不管B, A, K怎么变化。——为什么???

KeyTo9_Fans 发表于 6 天前

我还是觉得没啥难度呀,机器精度完全足够复现Michael S. Branicky的结果,而且还能继续延长3~5项:
#include<cmath>
#include<cstdio>
double a,b,d,f,g,h;
long long e;
int main()
{
        a=e=1;
        while(e<1e16)
        {
                printf("%lld, ",e+1);
                b=(log(a)+log(10)*e)/log(2);
                d=exp(log(2)*(long long)(b)-log(10)*e);
                for(f=0,g=1;g>2e-18;a*=2,g/=10)
                        if(a>=d)a-=d,f+=g;
                e=(long long)(b);
                a=f;
        }
        return 0;
}
运行结果:
2, 4, 10, 31, 100, 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,
3560347300509671
你们可以改成高精度,验一下上面的数列到了哪一项就不一致了。

#####

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

王守恩 发表于 6 天前

本帖最后由 王守恩 于 2026-4-14 09:27 编辑

NestList (# - 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}

KeyTo9_Fans 发表于 6 天前

我用python搞成高精度了,和你上面的输出是一致的:from decimal import Decimal, getcontext
getcontext().prec = 200
ln2 = Decimal(2).ln()
ln10 = Decimal(10).ln()
a = Decimal(1)
e = 1
while e < 10**200:
    print(e + 1)
    b = (a.ln() + ln10 * e) / ln2
    ll_b = int(b)
    d = (ln2 * ll_b - ln10 * e).exp()
    f = Decimal(0)
    g = Decimal(1)
    while g > Decimal('1e-200'):
      if a >= d:
            a -= d
            f += g
      a *= 2
      g /= 10
    e = ll_b
    a = f
输出结果:
2
4
10
31
100
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
4784468834763081346
15893661441312481253
52797600472523900437
175389832352315422663
582632411648741041920
1935462977247931791628
6429468840734244393709
21358233177237966605394
70950514848622174528405
235692508622360974195958
782953566147102814617343
2600915448376311691313555
8640054100387830930358540
28701638457425090555526915
95344779161019984506204705
316728500595823403320105922
1052149304580814448477908456
3495164334903208087022834978
11610684600363268945421466506
38569859374822790062833434036
128126299473078543553061211470
425626353913571464421883265664
1413900142989964696264005783930
4696874608363622635125333090739
15602679719686195079367186445692
51830980116354846807243775876948
172178789034067414690517780784713
571965556635952642441117800893573
1900028451896859912616119061868242
6311757895441520242197476841126773
20967205880994316931913496148453578
69651550287362551109302814460006892
231377441752049594889305539409373676
768619224279297761301429695197554357
2553297795403929895333266596592231186
8481871681166279123855799525570355179
28176167834895766876316768911980670971
93599203537001871992072580403011500692
310929823888647096110443538025101616976
1032886517514076534769535336563643989211
3431174741360378486581976013937370470782
11398115771792920347496749624773547264762
37863721011097653625209578965518810993919
125780558603742221730579006039251371534748
417833971416397631699844703911091523672437
1388014408646494398914813637734187755502531
4610884060191257982903148807363210375587741
15317025301817651812016887641541245247670583
50882056680208638353658905458969865362552195
169026533611636270808726034057784938832697784
561493990785917595026902136962363841355889628
1865242663102165424467648235958100379086760371
6196202006341606624652740411386965636202930515
20583337526463625567756523300038324289833112059
68376367215708864957117111269115914940522281633
227141375280198450377273991755786428149468480129
754547316054645058270661604048909995453694991762
2506551928123779536221075647247613569800780341361
8326585271328471754833874947333005225387668726193
27660317547301361280576582937658230939432617338008
91885585973886290244003098628617978986426801829209
305237309561841027228219838342591757178168112672788
1013976394241310634381657187277255878939640732316800
3368356671582794085612439374526108332355234067825378后面的输出太长了,我把他截断了,只保留了前100行
页: [1] 2
查看完整版本: 把二进制数看成十进制数后再转成二进制