addhelp(nxtPalindrome, "Given a palindrome n, return the next larger palindrome."); nxtPalindrome(n)={my(d=digits(n)); i=(#d+1)\2; while(i&&d[i]==9, d[i]=0; d[#d+1-i]=0; i--); if(i, d[i]++; d[#d+1-i]=d[i], d=vector(#d+1); d[1]=d[#d]=1); sum(i=1, #d, 10^(#d-i)*d[i])} addhelp(palindrome, "The n-th palindrome."); palindrome(n)={my(d, i, r); r=vector(#digits(n-10^(#digits(n\11)))+#digits(n\11)); n=n-10^(#digits(n\11)); d=digits(n); for(i=1, #d, r[i]=d[i]; r[#r+1-i]=d[i]); sum(i=1, #r, 10^(#r-i)*r[i])} addhelp(upto, "Terms from A046348 <= n."); upto(n) = {my(res = List(), pal = 4); while(pal < n, f = factor(pal); if(vecsum(f[, 2]) > 1, s = sum(i=1, #f~, f[i, 1] * f[i, 2]); if(pal % s == 0, listput(res, pal)); ); pal = nxtPalindrome(pal); ); res }