Mirando el Primer conteo de funciones en la Wikipedia, sólo he encontrado fórmulas con ningún indicio sobre cómo la gente llegó allí. Así, para entender mejor, me he decidido a crear uno desde cero, a partir de un ingenuo tipo de Tamices de Eratóstenes. Aquí es lo que he encontrado hasta ahora: Vamos a k=⌊x−16⌋ y una función p1(x): p1(x)=k−6i2−2i⩽k∑i=1(⌊k+i6i−1⌋−i+1)−6i2+2i⩽k∑i=1(⌊k−i6i+1⌋−i+1)+i⩽k−2925∑i=0(⌊k+5i+630i+35⌋−1)+i⩽k−2935∑i=0⌊k−5i−430i+25⌋+i⩽k−6435∑i=0(⌊k+7i+1342i+77⌋−1)+i⩽k−5749∑i=0(⌊k−7i−842i+49⌋−1) y vamos a k=⌊x+16⌋ y una función p2(x)tales que: p2(x)=k−i⩽k+17∑i=1⌊k−i6i−1⌋+i⩽k−2125∑i=0(⌊k+5i+430i+25⌋−1)+i⩽k−4135∑i=0⌊k−5i−630i+35⌋+i⩽k−4135∑i=0(⌊k+7i+842i+49⌋−1) para cualquier x⩽874,: 2+p1(x)+p2(x)=π(x) Aunque el resultado parece complicado, este es sólo muy simples sumas y programación de un algoritmo que coincide con ella es realmente sencillo. Aquí, por ejemplo, es el correspondiente código de Mathematica:
Manipulate[
Module[{panel, p1, p2, pcount},
p1[x_] :=
Module[{k, i, sum, sum1, sum2, sum3, sum4, sum5, sum6},
k = Floor[(x - 1)/6];
sum1 = (i = 1; sum = 0;
While[6*i^2 - 2*i <= k, sum += Floor[(k + i)/(6*i - 1)] - i + 1;
i++]; sum);
sum2 = (i = 1; sum = 0;
While[6*i^2 + 2*i <= k, sum += Floor[(k - i)/(6*i + 1)] - i + 1;
i++]; sum);
sum3 = (i = 0; sum = 0;
While[i <= (k - 29)/25,
sum += Floor[(k + 5*i + 6)/(30*i + 35)] - 1; i++]; sum);
sum4 = (i = 0; sum = 0;
While[i <= (k - 29)/35, sum += Floor[(k - 5*i - 4)/(30*i + 25)];
i++]; sum);
sum5 = (i = 0; sum = 0;
While[i <= (k - 64)/35,
sum += Floor[(k + 7*i + 13)/(42*i + 77)] - 1; i++]; sum);
sum6 = (i = 0; sum = 0;
While[i <= (k - 57)/49,
sum += Floor[(k - 7*i - 8)/(42*i + 49)] - 1; i++]; sum);
k - sum1 - sum2 + sum3 + sum4 + sum5 + sum6
];
p2[x_] :=
Module[{km, i, sum, sum1, sum2, sum3, sum4, sum5, sum6},
km = Floor[(x + 1)/6];
sum1 = (i = 1; sum = 0;
While[i <= (km + 1)/7, sum += Floor[(km - i)/(6*i - 1)]; i++];
sum);
sum2 = (i = 0; sum = 0;
While[i <= (km - 21)/25,
sum += Floor[(km + 5*i + 4)/(30*i + 25)] - 1; i++]; sum);
sum3 = (i = 0; sum = 0;
While[i <= (km - 41)/35,
sum += Floor[(km - 5*i - 6)/(30*i + 35)]; i++]; sum);
sum4 = (i = 0; sum = 0;
While[i <= (km - 41)/35,
sum += Floor[(km + 7*i + 8)/(42*i + 49)] - 1; i++]; sum);
km - sum1 + sum2 + sum3 + sum4
];
pcount[x_] := 2 + p1[x] + p2[x];
panel =
Panel@Column[{
Grid[{
{"x", x}, {"\[Pi](x)", PrimePi[x]}, {"pcount(x)", pcount[x]}
}, Alignment -> {Left, Top}, Frame -> All]
}];
panel
]
, {{x, 301}, 1, 1500, 1, Appearance -> "Open"}
]
He encontrado muy interesante el hecho de que usted no tiene que confiar en la tabla de los números Primos ni necesidad de prueba de la división.
Aunque el rango de x⩽874 (de hecho, también funciona para el rango de 1001⩽x⩽1224) es muy pequeña, creo que la fórmula puede ser extendido a cualquier rango mediante la adición de cantidades necesarias, pero después se hace difícil evitar duplicados cuenta.
EDIT1: algunas personas incomprendido "por la adición de cantidades necesarias". Me refiero en el hecho de que yo estoy bastante seguro de que p1(x) p2(x) válido para cualquier x puede ser escrita en la forma de un único doble de la suma de k (i.e: pn(x)=∑∑f(k) ).
Yo no encuentro nada en la red sobre este o el mismo tipo de fórmula. ¿Alguien sabe algo al respecto?