simplify sieving method
This commit is contained in:
parent
f162f99963
commit
5f674230e5
|
@ -68,7 +68,7 @@
|
|||
"Therefore, if you have the number's factorization (see [problem 3](https://projecteuler.net/problem=3)), you can use it to compute the sum of its divisors.\n",
|
||||
"\n",
|
||||
"## Sieving the sums of divisors\n",
|
||||
"Since we need all the sums of divisors up to 10000, instead of factoring each number individually, we could sieve the values of $\\sigma$. This is possible because the sum of divisors function is multiplicative."
|
||||
"Since we need all the sums of divisors up to 10000, instead of factoring each number individually, we could sieve the values of $\\sigma$."
|
||||
]
|
||||
},
|
||||
{
|
||||
|
@ -82,18 +82,12 @@
|
|||
" dsum = [1 for _ in range(0, limit)]\n",
|
||||
" \n",
|
||||
" for n in range(0, limit):\n",
|
||||
" if n == 0 or n == 1 or dsum[n] != 1:\n",
|
||||
" if n == 0 or n == 1:\n",
|
||||
" yield dsum[n]\n",
|
||||
" continue\n",
|
||||
" \n",
|
||||
" m = 1\n",
|
||||
" while m * n < limit:\n",
|
||||
" dsum[m*n] = dsum[m] + m*n\n",
|
||||
" for k in range(2 * m * n, limit, m * n):\n",
|
||||
" if k % (m*n^2) != 0:\n",
|
||||
" dsum[k] *= dsum[m*n]\n",
|
||||
" \n",
|
||||
" m *= n\n",
|
||||
" for k in range(n, limit, n):\n",
|
||||
" dsum[k] += n\n",
|
||||
" \n",
|
||||
" yield dsum[n]"
|
||||
]
|
||||
|
|
Loading…
Reference in New Issue