1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| import threading import math ans = 0 lock = threading.Lock()
def isPrime(n): if n <= 1: return False for i in range(2, int(math.sqrt(n)) + 1): if n % i == 0: return False return True
def howMany(T): sum = 0; for i in range(T[0], T[1] + 1): if isPrime(i): sum += 1 lock.acquire() try: global ans ans += sum finally: lock.release()
def seprateNum(N, CPU_COUNT): list = [[i * (N // CPU_COUNT) + 1, (i + 1) * (N // CPU_COUNT)] for i in range(0, CPU_COUNT)] list[0][0] = 1 if list[CPU_COUNT - 1][1] < N: list[CPU_COUNT - 1][1] = N return list
if __name__ == '__main__': N = int(input()) threadNum = 32 t = [] sepList = seprateNum(N, threadNum) for i in range(0, threadNum): t.append(threading.Thread(target = howMany, args = (sepList[i], ))) t[i].start() for i in range(0, threadNum): t[i].join() print(N - 1 - ans, end = '')
|