login
A225592
a(n) = size of the network of triangular(n). Distinct triangular numbers T and R are directly connected if R = T*k, and k>0 is a triangular number less than T. Numbers belong to the same network if there is a chain of direct connections between them.
0
1, 1, 1, 1, 2, 7, 1, 1, 2, 8, 2, 3, 7, 7, 1, 1, 1, 5, 4, 7, 2, 3, 4, 1, 1, 1, 1, 2, 2, 1, 1, 1, 3, 8, 7, 2, 4, 6, 3, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 8, 1, 1, 1, 2, 1, 4, 1, 2, 2, 1, 1, 1, 3, 2, 3, 1, 1, 1, 1, 4, 3, 2, 5, 2, 1, 1, 1, 1, 8, 1, 1, 1, 1, 1, 7, 2
OFFSET
1,5
EXAMPLE
Triangular(6) = 21 belongs to the network with the following members: 21, 105, 210, 630, 19110, 25200, 145530. So a(6) = 7.
Triangular(133) = 8911 belongs to the network with the following members: 8911, 810901, 28158760, 3104129028, 328779810450, 543633020560, 18474540054600, 45742477468287600, 1553903798634573750. So a(133) = 9.
PROG
(Python)
def isTriangular(a):
sr = 1L << (long.bit_length(a) >> 1)
a += a
while a < sr*(sr+1): sr>>=1
b = sr>>1
while b:
s = sr+b
if a >= s*(s+1): sr = s
b>>=1
return (a==sr*(sr+1))
network = [0]*1000
readPos = writePos = 0
def addConnection(R):
global writePos
if isTriangular(R):
for j in range(readPos):
if network[j]==R: return
network[writePos] = R
writePos += 1
for i in range(1, 1000000):
readPos, writePos = 0, 1
network[0] = i*(i+1)/2
while readPos < writePos:
T = long(network[readPos])
readPos += 1
n = k = 3
while k < T:
addConnection(T*k)
if T % k == 0 and T/k > k: addConnection(T/k)
k += n
n += 1
print str(readPos)+', ',
CROSSREFS
Sequence in context: A345930 A084794 A116691 * A258715 A011340 A081705
KEYWORD
nonn
AUTHOR
Alex Ratushnyak, May 11 2013
STATUS
approved