Skip to content

Commit aefeb73

Browse files
committed
modified: Math/sum_of_prime_powers.sf -- added PARI/GP program.
1 parent e2b731c commit aefeb73

File tree

3 files changed

+15
-2
lines changed

3 files changed

+15
-2
lines changed

Math/sum_of_k-almost_primes.sf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
func almost_prime_sum(n,k) {
2222

2323
if (k == 1) {
24-
return prime_sum(n)
24+
return n.prime_sum
2525
}
2626

2727
var total = 0

Math/sum_of_k-omega_primes.sf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
func omega_prime_sum(n, k=1) {
1717

1818
if (k == 1) {
19-
return prime_powers(n).sum
19+
return n.prime_power_sum
2020
}
2121

2222
var total = 0

Math/sum_of_prime_powers.sf

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,19 @@
22

33
# Sublinear algorithm for computing the sum of prime powers <= n, based on the sublinear algorithm for computing the sum of primes <= n.
44

5+
# See also:
6+
# https://oeis.org/A074793
7+
8+
# PARI/GP program:
9+
#`(
10+
11+
f(n) = if(n <= 1, return(0)); my(r=sqrtint(n)); my(V=vector(r, k, n\k)); my(L=n\r-1); V=concat(V, vector(L, k, L-k+1)); my(T=vector(#V, k, V[k]*(V[k]+1)\2)); my(S=Map(matrix(#V, 2, x, y, if(y==1, V[x], T[x])))); forprime(p=2, r, my(sp=mapget(S, p-1), p2=p*p); for(k=1, #V, if(V[k] < p2, break); mapput(S, V[k], mapget(S, V[k]) - p*(mapget(S, V[k]\p) - sp)))); mapget(S, n)-1;
12+
g(n, j=2) = if(n <= 1, return(0)); my(r=sqrtint(n)); my(V=vector(r, k, n\k)); my(F(n, j)=(subst(bernpol(j+1), x, n+1) - subst(bernpol(j+1), x, 1)) / (j+1)); my(L=n\r-1); V=concat(V, vector(L, k, L-k+1)); my(T=vector(#V, k, F(V[k], j))); my(S=Map(matrix(#V, 2, x, y, if(y==1, V[x], T[x])))); forprime(p=2, r, my(sp=mapget(S, p-1), p2=p*p); for(k=1, #V, if(V[k] < p2, break); mapput(S, V[k], mapget(S, V[k]) - p^j*(mapget(S, V[k]\p) - sp)))); mapget(S, n)-1;
13+
a(n) = my(s=0); forprime(p=2, sqrtnint(n,3), s += (p^(logint(n, p)+1) - 1)/(p-1) - p - 1); f(n) + g(sqrtint(n)) - g(sqrtnint(n, 3)) + s;
14+
b(n) = my(s=0); forprime(p=2, sqrtint(n), s += (p^(logint(n, p)+1) - 1)/(p-1) - p - 1); f(n) + s;
15+
16+
)
17+
518
func sum_of_primes(n, j=1) {
619

720
return 0 if (n <= 1)

0 commit comments

Comments
 (0)