project_euler.problem_551.sol1¶
Sum of digits sequence Problem 551
- Let a(0), a(1),… be an integer sequence defined by:
a(0) = 1 for n >= 1, a(n) is the sum of the digits of all preceding terms
The sequence starts with 1, 1, 2, 4, 8, … You are given a(10^6) = 31054319.
Find a(10^15)
Attributes¶
Functions¶
|
adds addend to digit array given in digits |
|
same as next_term(a_i, k, i, n) but computes terms without memoizing results. |
|
Calculates and updates a_i in-place to either the n-th term or the |
|
returns n-th term of sequence |
Module Contents¶
- project_euler.problem_551.sol1.add(digits, k, addend)¶
adds addend to digit array given in digits starting at index k
- project_euler.problem_551.sol1.compute(a_i, k, i, n)¶
same as next_term(a_i, k, i, n) but computes terms without memoizing results.
- project_euler.problem_551.sol1.next_term(a_i, k, i, n)¶
Calculates and updates a_i in-place to either the n-th term or the smallest term for which c > 10^k when the terms are written in the form:
a(i) = b * 10^k + c
For any a(i), if digitsum(b) and c have the same value, the difference between subsequent terms will be the same until c >= 10^k. This difference is cached to greatly speed up the computation.
Arguments: a_i – array of digits starting from the one’s place that represent
the i-th term in the sequence
- k – k when terms are written in the from a(i) = b*10^k + c.
Term are calulcated until c > 10^k or the n-th term is reached.
i – position along the sequence n – term to calculate up to if k is large enough
Return: a tuple of difference between ending term and starting term, and the number of terms calculated. ex. if starting term is a_0=1, and ending term is a_10=62, then (61, 9) is returned.
- project_euler.problem_551.sol1.solution(n: int = 10**15) int ¶
returns n-th term of sequence
>>> solution(10) 62
>>> solution(10**6) 31054319
>>> solution(10**15) 73597483551591773
- project_euler.problem_551.sol1.base¶
- project_euler.problem_551.sol1.ks¶
- project_euler.problem_551.sol1.memo: dict[int, dict[int, list[list[int]]]]¶