15/11/20 179 Россия, Москва.
|
Последний раз редактировалось kazvadim 16.11.2020, 09:58, всего редактировалось 1 раз.
Вопрос, почему не подходят такие варианты? - особенно этот красив :) Т.е. я понимаю что тут двоичный палиндром слишком короткий, но у вас ведь тоже есть не менее странная комбинация . Как бы это дело формализовать? Ограничить минимальную длину двоичного полинома длиной исходного числа что ли? Но и в нём могут быт младшие нули ... В общем вот первый вариант программы с её выводом (выполняется пару секунд, но если добавить ещё десяток цифр, то уже несколько минут, но есть что пооптимизировать): (Оффтоп)
Код: x=196; {ispalindrom(x)=my(v,i); if(x<12, return(1)); v=digits(x); i=#v; while(i>1 && v[i]==0, i--); v=v[1..i]; return(#v==1 || Vecrev(v)==v); } zz=vector(10); {while(x<1e20, b=x%2; y=b; printf("%d:%c", x,13); while(y<x, y=fromdigits(digits(b,2)); if(y>x, break); if(ispalindrom(y) && ispalindrom((x-y)/2), w=digits((x-y)/2); z=vector(10); for(i=1,#w, z[w[i]+1]++); zz+=z; printf("%d:%d=%d+%d*2", z,x,y,(x-y)/2); break; ); b+=2; ); print; x+=fromdigits(Vecrev(digits(x))); )} printf("%d - digit counts\n", zz);
196: [0,0,0,2,0,0,0,0,0,1]:887=101+393*2 [0,0,0,0,0,0,0,2,1,0]:1675=101+787*2 [0,0,0,2,0,0,2,0,0,0]:7436=110+3663*2 [0,0,0,0,0,0,2,0,2,0]:13783=11+6886*2 [0,0,2,0,0,2,0,1,0,0]:52514=1010+25752*2 [0,0,0,0,2,0,2,0,0,1]:94039=111+46964*2 [0,0,0,2,0,1,0,0,0,2]:187088=10+93539*2 [0,0,0,2,2,0,0,0,2,0]:1067869=101101+483384*2 [0,0,0,2,0,2,0,3,0,0]:10755470=0+5377735*2 [1,0,0,0,0,4,0,0,2,0]:18211171=1100011+8555580*2 [0,2,0,0,0,2,2,2,0,0]:35322452=11110+17655671*2 [0,0,4,2,0,2,0,0,0,0]:60744805=10100101+25322352*2 [0,0,0,0,2,4,0,2,0,0]:111589511=100001+55744755*2 [0,4,0,2,0,0,0,2,1,0]:227574622=0+113787311*2 [0,0,4,0,0,0,3,0,0,2]:454050344=111100+226969622*2 [0,0,0,0,6,0,0,0,2,1]:897100798=111110+448494844*2 [2,0,0,0,0,1,0,2,2,2]:1794102596=1000+897050798*2 [2,0,0,4,0,0,0,2,2,0]:8746117567=1000110001+3873003783*2 [0,2,0,0,2,0,4,2,0,0]:16403234045=1111001111+7646116467*2 [0,0,5,4,0,2,0,0,0,0]:70446464506=0+35223232253*2 [0,0,0,0,5,2,4,0,0,0]:130992928913=100000001+65446464456*2 [0,0,4,0,2,4,0,0,2,0]:450822227944=1111111100+224855558422*2 [0,0,4,0,4,0,0,2,0,2]:900544455998=1100000110+449722227944*2 [0,0,0,0,2,0,0,0,4,6]:1800098901007=1101111011+899498894998*2 [6,0,0,0,4,0,0,0,1,2]:8801197801088=1000001000+4400098900044*2 [4,2,0,0,0,0,0,1,6,0]:17602285712176=110110000+8801087801088*2 [0,4,0,4,2,0,2,2,0,0]:84724043932847=10101111110101+37311466411373*2 [0,0,0,2,0,0,0,6,2,4]:159547977975595=100001+79773988937797*2 [0,0,0,2,0,4,0,5,4,0]:755127757721546=10000010000+377558878855773*2 [0,2,2,0,2,3,2,4,0,0]:1400255515443103=110000000000011+645127757721546*2 [2,2,4,4,2,2,0,0,0,0]:4413700670963144=11010000101100+2201345335431022*2 [2,2,0,2,6,0,4,0,0,0]:8827391431036288=110110110000+4413640660463144*2 [0,0,2,2,2,0,4,0,6,0]:17653692772973576=100001000+8826846336486288*2 [0,0,0,2,4,6,0,5,0,0]:85191620502609247=10100111011100101+37545754745754573*2 [4,2,2,0,2,1,2,2,0,2]:159482241005228405=11101000000010111+74190620502609147*2 [2,0,6,4,0,2,4,0,0,0]:664304741147513356=11000101101000110+326652320023256623*2 [0,2,0,0,4,4,2,4,2,0]:1317620482294916822=111000000001110+658754741147457856*2 [0,2,5,2,2,4,4,0,0,0]:3603815405135183953=1111110100010111111+1246352652562536421*2 [2,2,0,6,2,5,0,0,2,0]:7197630720180367016=110000110110000110+3543815305035183453*2 [2,0,0,2,3,0,8,4,0,0]:13305261530450734933=10000001110000001+6647630764670367466*2 [0,2,4,6,6,0,2,0,0,0]:47248966933966985264=100111100100000+23624433411433442632*2 [0,0,0,2,4,0,6,2,2,4]:93507933867933969538=10000000000000010+46748966933966984764*2 [29,30,48,62,72,57,59,55,45,29] - digit counts
Очень даже подходят. Просто начинал перебор двоичных палиндромов длиной исходного числа. А посмотреть более короткие комбинации не догадался. Спасибо. Значит, несколько вариантов разложения, это может пригодиться. Да, теперь можно начинать перебор от одного знака до длины исследуемого числа. Вроде бы это может ускорить работу программы и помочь находить самый оптимальный двоичный палиндром. Спасибо за программу. Теперь есть инструмент и можно поработать. Смутная мысль. А не могли ли среди миллионов чисел из последовательности 196 пропустить палиндром с нулём или нулями в конце числа. Просто не введя процедуру распознавания таких палиндромов. -- 16.11.2020, 09:58 --Любопытное наблюдение: если к числу дописать впереди не значащий ноль, то за три шага получим число-палиндром - ; ; ; Действительно любопытно. Опять возникает смутное подозрение, что в математике палиндромов с цифрой 0 не всё доработано.
|
|