refactor method

This commit is contained in:
filifa 2025-07-23 23:18:49 -04:00
parent d3701a5b61
commit 5309593e70
1 changed files with 17 additions and 15 deletions

View File

@ -132,6 +132,22 @@
"metadata": {},
"outputs": [],
"source": [
"def update_multiples(dsum, p, limit):\n",
" q = p\n",
" while True:\n",
" # sigma(a*b) = sigma(a) * sigma(b) if gcd(a, b) = 1\n",
" for k in range(2 * q, limit, q):\n",
" if k % (p*q) != 0:\n",
" dsum[k] *= dsum[q]\n",
"\n",
" if p * q >= limit:\n",
" break\n",
"\n",
" # sigma(p^k) = p^k + sigma(p^(k-1))\n",
" dsum[p*q] = p * q + dsum[q]\n",
" q *= p\n",
" \n",
"\n",
"def sum_of_divisors_range(limit): \n",
" dsum = [1 for n in range(0, limit)]\n",
" dsum[0] = 0\n",
@ -144,21 +160,7 @@
"\n",
" # n is prime\n",
" dsum[n] = n + 1\n",
"\n",
" m = n\n",
" while True:\n",
" # sigma(a*b) = sigma(a) * sigma(b) if gcd(a, b) = 1\n",
" for k in range(2 * m, limit, m):\n",
" if k % (m*n) != 0:\n",
" dsum[k] *= dsum[m]\n",
"\n",
" if m * n >= limit:\n",
" break\n",
" \n",
" # sigma(p^k) = p^k + sigma(p^(k-1))\n",
" dsum[m*n] = m*n + dsum[m]\n",
" m *= n\n",
" \n",
" update_multiples(dsum, n, limit)\n",
" yield dsum[n]"
]
},