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.

A192274 Numbers which are both Zumkeller numbers and anti-Zumkeller numbers.

Original entry on oeis.org

42, 70, 78, 88, 126, 160, 176, 228, 234, 258, 270, 280, 308, 342, 350, 368, 378, 380, 390, 396, 402, 438, 448, 462, 468, 490, 500, 522, 532, 540, 552, 558, 560, 572, 580, 588, 608, 618, 620, 630, 644, 650, 690, 702, 732, 756, 770, 780, 798, 812, 822, 852, 858
Offset: 1

Views

Author

Paolo P. Lava, Jun 28 2011

Keywords

Comments

Numbers n whose sets of divisors and anti-divisors can each be partitioned into two disjoint sets whose sums are sigma(n)/2 for the sets in the divisors partition and sigma*(n)/2 for the anti-divisors partition, where sigma*(n) is the sum of the anti-divisors of n.

Examples

			270-> divisors: 1,2,3,5,6,9,10,15,18,27,30,45,54,90,135,270; sigma(270)/2=360; 1+2+3+5+6+9+10+15+18+27+30+45+54+135=90+270=360.
270-> anti-divisors: 4,7,11,12,20,36,49,60,77,108,180; sigma*(270)/2=282; 4+7+11+20+60+180=12+36+49+77+108=282.
		

Crossrefs

Programs

  • Maple
    with(combstruct);
    with(numtheory);
    P:=proc(i)
    local S,R,Stop,Comb,a,b,c,d,k,m,n,s;
    for n from 3 to i do
      a:={};
      for k from 2 to n-1 do if abs((n mod k)- k/2) < 1 then a:=a union {k}; fi; od;
      b:=nops(a); c:=op(a); s:=0;
       if b>1 then for k from 1 to b do s:=s+c[k]; od;
       else s:=c;
      fi;
      if (modp(s,2)=0 and 2*n<=s) then
         S:=1/2*s-n; R:=select(m->m<=S,[c]); Stop:=false; Comb:=iterstructs(Combination(R));
         while not (finished(Comb) or Stop) do Stop:=add(d,d=nextstruct(Comb))=S; od;
         if Stop then
            s:=sigma(n);
            if (modp(s,2)=0 and 2*n<=s) then
              S:=1/2*s-n; R:=select(m->m<=S,divisors(n)); Stop:=false;       Comb:=iterstructs(Combination(R));
              while not (finished(Comb) or Stop) do Stop:=add(d,d=nextstruct(Comb))=S; od;
              if Stop then print(n); fi;
            fi;
         fi;
      fi;
    od;
    end:
    P(10000);
  • Python
    from sympy import divisors
    from sympy.combinatorics.subsets import Subset
    def antidivisors(n):
        return [2*d for d in divisors(n) if n > 2*d and n % (2*d)] + \
               [d for d in divisors(2*n-1) if n > d >=2 and n % d] + \
               [d for d in divisors(2*n+1) if n > d >=2 and n % d]
    for n in range(1, 10**3):
        d = divisors(n)
        s = sum(d)
        if not s % 2 and max(d) <= s/2:
            for x in range(1, 2**len(d)):
                if sum(Subset.unrank_binary(x, d).subset) == s/2:
                    d = antidivisors(n)
                    s = sum(d)
                    if not s % 2 and max(d) <= s/2:
                        for x in range(1, 2**len(d)):
                            if sum(Subset.unrank_binary(x, d).subset) == s/2:
                                print(n, end=', ')
                                break
                    break
    # Chai Wah Wu, Aug 14 2014
    
  • Python
    from sympy import divisors
    import numpy as np
    A192274 = []
    for n in range(3,10**3):
        d = divisors(n)
        s = sum(d)
        if not s % 2 and 2*n <= s:
            d.remove(n)
            s2, ld = int(s/2-n), len(d)
            z = np.zeros((ld+1,s2+1),dtype=int)
            for i in range(1,ld+1):
                y = min(d[i-1],s2+1)
                z[i,range(y)] = z[i-1,range(y)]
                z[i,range(y,s2+1)] = np.maximum(z[i-1,range(y,s2+1)],z[i-1,range(0,s2+1-y)]+y)
                if z[i,s2] == s2:
                    d2 = [2*x for x in d if n > 2*x and n % (2*x)] + \
                    [x for x in divisors(2*n-1) if n > x >=2 and n % x] + \
                    [x for x in divisors(2*n+1) if n > x >=2 and n % x]
                    s, dmax = sum(d2), max(d2)
                    if not s % 2 and 2*dmax <= s:
                        d2.remove(dmax)
                        s2, ld = int(s/2-dmax), len(d2)
                        z = np.zeros((ld+1,s2+1),dtype=int)
                        for i in range(1,ld+1):
                            y = min(d2[i-1],s2+1)
                            z[i,range(y)] = z[i-1,range(y)]
                            z[i,range(y,s2+1)] = np.maximum(z[i-1,range(y,s2+1)],z[i-1,range(0,s2+1-y)]+y)
                            if z[i,s2] == s2:
                                A192274.append(n)
                            break
                    break
    # Chai Wah Wu, Aug 19 2014

Extensions

Corrected entries and comment by Chai Wah Wu, Aug 13 2014