10
10
11
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
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 ;
13
+ a ( n ) = my ( s = 0 ) ; forprime ( p = 2 , sqrtnint ( n , 3 ) , s += ( p ^( logint ( n , p ) +1 ) - 1 ) /( p -1 ) - p * p - p - 1 ) ; f ( n ) + g ( sqrtint ( n ) ) + s ;
14
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
15
16
16
)
@@ -41,7 +41,7 @@ func sum_of_primes(n, j=1) {
41
41
func sum_of_prime_powers ( n ) {
42
42
43
43
# a(n) = Sum_{p prime <= n} p
44
- # b(n) = Sum_{n^(1/3) < p prime <= n^(1/2)} p^2
44
+ # b(n) = Sum_{p prime <= n^(1/2)} p^2
45
45
# c(n) = Sum_{p prime <= n^(1/3)} f(p)
46
46
47
47
# sum_of_prime_powers(n) = a(n) + b(n) + c(n)
@@ -50,13 +50,13 @@ func sum_of_prime_powers(n) {
50
50
var cr = n . icbrt
51
51
52
52
var ps1 = sum_of_primes ( n )
53
- var ps2 = ( sum_of_primes ( sr , 2 ) - sum_of_primes ( cr , 2 ) )
53
+ var ps2 = sum_of_primes ( sr , 2 )
54
54
55
- # f(p) = sum(1..n.ilog(p), {|k| p**k }) - p
56
- # = (1 - p**(n.ilog(p)+1))/(1-p) - p - 1
55
+ # f(p) = sum(1..n.ilog(p), {|k| p**k }) - p*p - p
56
+ # = (1 - p**(n.ilog(p)+1))/(1-p) - p*p - p - 1
57
57
58
58
var ps3 = cr . primes . sum { |p |
59
- ( p **( n . ilog ( p ) +1 ) - 1 ) /( p -1 ) - p - 1
59
+ ( p **( n . ilog ( p ) +1 ) - 1 ) /( p -1 ) - p * p - p - 1
60
60
}
61
61
62
62
ps1 + ps2 + ps3
0 commit comments