[seqfan] Re: Fw: NEW SEQ A164772
David Radcliffe
dradcliffe at gmail.com
Fri Aug 28 16:36:53 CEST 2009
(Re: Numbers n such that the average digit of n^2 is 8.)
I continued the search until 10^10 and found eight more terms. Here is
the complete list so far. Are there any patterns evident?
313,298327,9893887,197483417,282753937,314623583,315432874,
706399164,773303937,894303633,947047833,948675387,989938887,994987437,998398167
8882454614,8888194417,8943142063,9374913167,9416989417,9476286187,9949260676,9949823114
I am using a Python program for the search, and I have three
strategies to speed up the calculations.
1. Squares are generated by keeping a running total of consecutive odd numbers.
2. The digital sums of all numbers less than 10^6 are stored in a
lookup table. Repeated division by 10^6 is used to find the digital
sum of a larger number.
3. I am actually checking whether the digital sum of (10^d - 1 - k^2)
is equal to d, where d is the number of digits in k^2. The loop is
aborted when the sum of digits exceeds d.
I would be interested in other ideas to accelerate the search, other
than switching to C++. Here is my Python code.
k = 10104041174 # Starting value for search. Change to k=1 to start
at the beginning.
pow10 = 10
N = k**2
digits = 1
while pow10 <= N:
pow10 *= 10
digits += 1
n = pow10 - 1 - N
step = 2*k+1
block = 1000000
import scipy
digitsums = scipy.zeros(block,int)
for i in xrange(1,block):
digitsums[i] = digitsums[i/10] + (i % 10)
while 1:
if n < 0:
pow10 *= 10
digits += 1
n = pow10 - 1 - k*k
print "digits = %d" % (digits)
m = n
s = 0
while m>0:
s += digitsums[m % block]
if s > digits:
break
m /= block
else:
if s == digits:
print k
k += 1
n -= step
step += 2
More information about the SeqFan
mailing list