Этот очень короткий и простой код на #Python пытается смоделировать «Решето Эратосфена» для первых N натуральных чисел с ограничениями (0) краткости сценария; (1) минимизация операторов if и циклов for/ while; (2) эффективность с точки зрения использования процессорного времени.
Код: Выделить всё
import numpy as np
N = 10**5
a = np.array(range(3,N,2))
for j in range(0, int(round(np.sqrt(N),0))):
a[(a!=a[j]) & (a%a[j] == 0)] = 0
a = a[a!=0]
a = [2]+list(a)
На процессоре Intel Core I5 простые числа возвращаются одними из первых:
- < li>N = 100 000 за 0,03 секунды;
- N = 1 000 000 за 0,63 секунды;
- N = 10 000 000 за 22,2 секунды.
Хотит ли кто-нибудь поделиться более эффективными кодами в срок процессорного времени в рамках вышеупомянутых ограничений?
Подробнее здесь:
https://stackoverflow.com/questions/499 ... -in-python