|
|
A369351
|
|
The smallest number such that n or more numbers k exist such that a(n) - k = sopfr(a(n)) + sopfr(k), where sopfr(m) is the sum of the primes dividing m, with repetition.
|
|
9
|
|
|
6, 35, 77, 169, 287, 1147, 1517, 1517, 4352, 4352, 4352, 14647, 55488, 55488, 114091, 121673, 167137, 206837, 277928, 277928, 277928, 277928, 277928, 722473, 2165407, 2498227, 2498227, 2498227, 5271391, 5770603, 8321771, 8321771, 9983680, 9983680, 9983680, 9983680, 28277536, 28277536, 28277536, 28277536, 28277536
(list;
graph;
refs;
listen;
history;
text;
internal format)
|
|
|
OFFSET
|
1,1
|
|
COMMENTS
|
To find terms we can do the following:
a(n) - k = sopfr(a(n)) + sopfr(k) can be rewritten as
a(n) - sopfr(a(n)) = k + sopfr(k)
So one side depends on a(n) and the other side depends on k.
Now to find terms <= u, make a list V of values m + sopfr(m) where m <= 2*precprime(u). So like for 59 we get those values are 38, 44, 48 from V.
We look up 59 in a table W of values m - sopfr(m) and find that 77 is the smallest such value. Hence a(3) <= 77. By looking through all m <= 77 in V and then referring to W we find a(3) = 77.
|
|
LINKS
|
|
|
EXAMPLE
|
a(1) = 6 as 6 is the smallest number to have one number (k = 1) such that 6 - 1 = 5 = sopfr(6) + sopfr(1) = 5 + 0 = 5.
a(2) = 35 as 35 is the smallest number to have two numbers (k = 14, 15) such that 35 - 14 = 21 = sopfr(35) + sopfr(14) = 12 + 9 = 21, and 35 - 15 = 20 = sopfr(35) + sopfr(15) = 12 + 8 = 20.
a(3) = 77 as 77 is the smallest number to have three numbers (k = 38, 44, 48) such that 77 - 38 = 39 = sopfr(77) + sopfr(38) = 18 + 21 = 39, 77 - 44 = 33 = sopfr(77) + sopfr(44) = 18 + 15 = 33, and 77 - 48 = 29 = sopfr(77) + sopfr(48) = 18 + 11 = 29.
|
|
PROG
|
(Python)
from sympy import factorint
from functools import cache
from itertools import count, islice
from collections import Counter
kcount, kmax = Counter(), 0
@cache
def sopfr(n): return sum(p*e for p, e in factorint(n).items())
global kcount, kmax
target = n - sopfr(n)
for k in range(kmax+1, target+1):
kcount[k+sopfr(k)] += 1
kmax += 1
return kcount[target]
def agen(): # generator of terms
adict, n = dict(), 1
for m in count(2):
v = f(m)
if v not in adict: adict[v] = m
for i in range(n, v+1): yield m; n += 1
|
|
CROSSREFS
|
|
|
KEYWORD
|
nonn
|
|
AUTHOR
|
|
|
EXTENSIONS
|
|
|
STATUS
|
approved
|
|
|
|