Заменил, ускорилось:
Прекрасно, я считаю! Добавил счётчики
Код:
? {Piramida(k_max,hi,lo,k)=
my(y,z,t,q,kk=10^(k+1));
for(i=1,#d,
y=10^k*dl[i]+lo;
count3++; /* отработало 9 350 394 */
if(!issquare(Mod(y,kk)), count1++;next); /* отказ 154 992 */
q=hi*100+dh[i]*10*kk;
for(j=1,#c,
z=q+c[j]*kk+y;
t=0; if(issquare(z,&t), print(z," = ",t,"^2"); );
); count2++; /* отработало 9 195 402 */
if(k+1<k_max, Piramida(k_max,q,y,k+1); );
);
}
? Piramida(10,0,0,0);
196 = 14^2
38416 = 196^2
631421811659664 = 25128108^2
841 = 29^2
time = 1min, 42,391 ms.
? count1
%36 = 154992
? count2
%37 = 9195402
? count3
%38 = 9350394
? 3*6^10
%39 = 181398528
?
Без отсева, для 10 колец надо проверить
Код:
? total=0;for(i=1,10,total+=3*6^i);total
%40 = 217678230
?
Так что математиака тут сыграла бОльшую роль чем прогаммирование.
По программированию. Ну лично мне не нравятся функции которые не содержат в себе всё что им надо.
Тут рекурсия срабатывает (для 10 колец) 1,5 млн. раз. Это довольно сильно потребляет память на стек. У меня на планшете, например, становится плохо браузеру. Хотя казалось бы - в андроиде изоляция, управление памятью неплохое, да и памяти в планшете 12 гигов при 6 свободных (parisizemax установлен в 2 гигабайта)...