Суть задания: дать программе 1000 раз простое число, порядковый номер которого она выдала
import socket
import math
SERVER_HOST = "nfb-tasks.ru"
SERVER_PORT = 45596
def generate_primes(count):
limit = int(100000 * math.log(100000) * 1.2)
primes = []
sieve = [True] * (limit + 1)
sieve[0] = sieve[1] = False
for num in range(2, limit + 1):
if sieve[num]:
primes.append(num)
for multiple in range(num * num, limit + 1, num):
sieve[multiple] = False
if len(primes) >= count:
break
return primes[:count]
def main():
primes = generate_primes(100000)
if primes is None:
return
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as client_socket:
try:
client_socket.connect((SERVER_HOST, SERVER_PORT))
print(f"Подключено к серверу {SERVER_HOST}:{SERVER_PORT}")
response = client_socket.recv(1024).decode('utf-8')
print(response)
while True:
response = client_socket.recv(1024).decode('utf-8')
print(response)
if not response or "Игра окончена!" in response:
break
try:
n = int(response.split()[-1].strip(':'))
except ValueError:
print("Ошибка при извлечении номера простого числа.")
break
if 1 <= n <= len(primes):
prime_number = primes[n-1]
client_socket.sendall(f"{prime_number}\n".encode('utf-8'))
else:
print(f"Простое число под номером {n} не найдено.")
break
except ConnectionError:
print("Ошибка подключения к серверу.")
except KeyboardInterrupt:
print("Программа прервана пользователем.")
if __name__ == "__main__":
main()