En mi ordenador tu programa tarda 42.15 s., 5 menos que el mio. Ir creando la lista de primos está bien si quieres hallar los primos de 1 a n, pero si quieres hallar los primos en [m, n] sin tener que volver a hallar los primeros es impracticable.
Por ejemplo:
>>> contPrimos(100000000,100001000)
En (100000000, 100001000) hay 54 números primos que suman 5400026920
5.394605394605395% (0.18662136316398814 s)
>>> contPrimos(1000000000,1000001000)
En (1000000000, 1000001000) hay 49 números primos que suman 49000023003
4.895104895104895% (0.5057995038597767 s)
>>> contPrimos(10000000000,10000001000)
En (10000000000, 10000001000) hay 44 números primos que suman 440000023286
4.395604395604396% (1.5249081531406716 s)
>>> contPrimos(100000000000,100000001000)
En (100000000000, 100000001000) hay 47 números primos que suman 4700000020699
4.695304695304696% (6.290014921286655 s)
>>> contPrimos(1000000000000,1000000001000)
En (1000000000000, 1000000001000) hay 37 números primos que suman 37000000018433
3.6963036963036964% (12.93284394691372 s)
>>>
Programando solo un poquito más, se pueden filtrar también los múltiplos de 3, considerando solo candidatos de la forma \( 6k\pm{}1 \), o los de \( 2, 3\textrm{ y }5 \), utilizando la lista de restos \( \textrm{mod }30 \) primos con \( 30 \). Pero no es mucho ahorro, pues los compuestos con estos factores se eliminan en seguida.
Todo esto en plan elemental, claro. Hay algoritmos mucho más sofisticados y rápidos.
Saludos,