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.

A342304 k-digit positive numbers exactly one of whose substrings is divisible by k.

Original entry on oeis.org

1, 2, 3, 4, 5, 6, 7, 8, 9, 21, 23, 25, 27, 29, 41, 43, 45, 47, 49, 61, 63, 65, 67, 69, 81, 83, 85, 87, 89, 101, 104, 107, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 122, 125, 128, 131, 134, 137, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 152, 155, 158, 161
Offset: 1

Views

Author

Bernard Schott, Mar 08 2021

Keywords

Comments

Inspired by the 413th problem of Project Euler (see link) where such a number is called "one-child number".
There are k*(k+1)/2 substrings. All are considered, even when some are duplicates as strings or as numbers (see the Example section). 0 is always divisible by k so any number with two or more 0 digits is not a term. - Kevin Ryde, Mar 08 2021
The 2-digit terms are odd.
The number of k-digit terms for k = 1, 2, 3 is respectively 9, 20, 360.
From Robert Israel, Mar 11 2021: (Start)
5-digit terms are numbers starting with 5, and with no other digits 5 or 0.
There are no 10-digit terms. (End)

Examples

			107 is a 3-digit one-child number since among its substrings 1, 0, 7, 10, 07, 107 only 0 is divisible by 3.
222 is a 3-digit one-child number since among its substrings 2, 2, 2, 22, 22, 222 only 222 is divisible by 3.
572 is not a 3-digit one-child number, since among its substrings 5, 7, 1, 57, 72, 572 both 57 and 72 are divisible by 3.
616 is not a 3-digit one-child number, since among its substrings 6, 1, 6, 61, 16, 616 the two 6's are both divisible by 3.
		

Crossrefs

Cf. A063527.

Programs

  • Maple
    filter:= proc(n) local L,d,i,j,k, ct, x;
      L:= convert(n,base,10);
      d:= nops(L);
      ct:= 0:
      for i from 1 to d do
        for j from i to d do
          x:= add(L[k]*10^(k-i),k=i..j);
          if x mod d = 0 then ct:= ct+1; if ct = 2 then return false fi fi;
      od od;
      evalb(ct = 1)
    end proc:
    select(filter, [$1..200]); # Robert Israel, Mar 11 2021
  • Python
    def ok(n):
        s, c = str(n), 0
        ss = (s[i:j] for i in range(len(s)) for j in range(i+1, len(s)+1))
        for w in ss:
            if int(w)%len(s) == 0: c += 1
            if c == 2: return False
        return n > 0 and c == 1
    print([k for k in range(162) if ok(k)]) # Michael S. Branicky, Aug 15 2022