cp's OEIS Frontend

This is a front-end for the Online Encyclopedia of Integer Sequences, made by Christian Perfect. The idea is to provide OEIS entries in non-ancient HTML, and then to think about how they're presented visually. The source code is on GitHub.

A061906 Obtain m by omitting trailing zeros from n; a(n) = smallest k such that k*m is a palindrome.

Original entry on oeis.org

1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 21, 38, 18, 35, 17, 16, 14, 9, 1, 12, 1, 7, 29, 21, 19, 37, 9, 8, 1, 14, 66, 1, 8, 15, 7, 3, 13, 15, 1, 16, 6, 23, 1, 13, 9, 3, 44, 7, 1, 19, 13, 4, 518, 1, 11, 3, 4, 13, 1, 442, 7, 4, 33, 9, 1, 11, 4, 6, 1, 845, 88, 4, 3, 7, 287, 1, 11, 6, 1, 12345679, 8
Offset: 0

Views

Author

Klaus Brockhaus, Jun 25 2001

Keywords

Comments

Every positive integer is a factor of a palindrome, unless it is a multiple of 10 (D. G. Radcliffe, see Links).
Every integer n has a multiple of the form 99...9900...00. To see that n has a multiple that's a palindrome (allowing 0's on the left) with even digits, let 9n divide 99...9900...00; then n divides 22...2200...00. - Dean Hickerson, Jun 29 2001

Examples

			For n = 30 we have m = 3, 1*m = 3 is a palindrome, so a(30) = 1. For n = m = 12 the smallest palindromic multiple is 21*m = 252, so a(12) = 21.
		

Crossrefs

Cf. A050782, A062293, A061915, A061916, A061816. Values of k*m are given in A061906.

Programs

  • ARIBAS
    stop := 20000000; for n := 0 to maxarg do k := 1; test := true; while test and k < stop do mp := omit_trailzeros(n)*k; if test := mp <> int_reverse(mp) then inc(k); end; end; if k < stop then write(k," "); else write(-1," "); end; end;
    
  • Mathematica
    skp[n_]:=Module[{m=n/10^IntegerExponent[n,10],k=1},While[!PalindromeQ[k*m],k++];k]; Array[ skp,90,0] (* Harvey P. Dale, Jul 04 2024 *)
  • Python
    from _future_ import division
    def palgen(l, b=10): # generator of palindromes in base b of length <= 2*l
        if l > 0:
            yield 0
            for x in range(1, l+1):
                n = b**(x-1)
                n2 = n*b
                for y in range(n, n2):
                    k, m = y//b, 0
                    while k >= b:
                        k, r = divmod(k, b)
                        m = b*m + r
                    yield y*n + b*m + k
                for y in range(n, n2):
                    k, m = y, 0
                    while k >= b:
                        k, r = divmod(k, b)
                        m = b*m + r
                    yield y*n2 + b*m + k
    def A050782(n, l=10):
        if n % 10:
            x = palgen(l)
            next(x)  # replace with x.next() in Python 2.x
            for i in x:
                q, r = divmod(i, n)
                if not r:
                    return q
            else:
                return 'search limit reached.'
        else:
            return 0
    def A061906(n, l=10):
        return A050782(int(str(n).rstrip('0')),l) if n > 0 else 1
    # Chai Wah Wu, Dec 30 2014