Напишите следующую программу. Для проведения
соревнований по прыжкам с трамплина N спортсменов получают номера,
под которыми они будут выходить на старт и которые генерируются
датчиком случайных чисел. Определить какие номера являются простыми
числами и на каком очередном обращении к датчику случайных чисел
полученный номер будет наибольшим среди этих простых чисел. Вывести
полученные номера N спортсменов, и какой спортсмен имеет в качестве
номера наибольшее простое число. В качестве ответа представьте текст
программы на любом языке программирования. Опишите идею
реализованного вами алгоритма. Перед текстом программы напишите на
каком языке программирования представлена программа ПОЖАЛУЙСТА НУЖНО БЫСТРЕЕ


kirillllvov: ПОМОГИТЕ,У МЕНЯ ТАКАЯ ЖЕ ПРОБЛЕМА
rootправа: сча решими

Ответы

Ответ дал: rootправа
0

import random

n=int(input())

count=0

ans=[]

q=[]

s=[x for x in range(n+500)]

random.shuffle(s)

q=s[:n:]

for i in range(len(q)):

   for j in range(2, i-1):

       if s[i]%j==0:

           break

       else: ans.append(s[i])

print(len(ans), max(ans))

генерирую список случайных чисел, каждое число в списке s  проверяю на делимость на все числа от 1, до самого этого числа минус единица. Если находится число, которое делит число из списка s без остатка, перехожу к следующему числу, если такого числа не найдётся добавляю в список ans . в конец вывожу максимальное найденное простое из списка ans

примечание: алгоритм не оптимизирован, если спортсменов будет более 10000, считать будет долго)))


mathgenius: Обратите внимание на то, что у каждого спортсмена должен быть свой номер, то бишь номера спортсменов повторяться не могут. У вас же при генерации n разных номеров могут быть повторяющееся при такой реализации: s = [random.randint(0, i) for i in range(n)]
mathgenius: Тут удобно применять random.shuffle
rootправа: о, спасибо, буду использовать
mathgenius: Надо в ответе это поменять, решение то неверное...
Ответ дал: mathgenius
0

from random import shuffle

def isprime(n): #Если проcтое, то вводит это число, иначе вводит 0.

   return n*(0 not in map(lambda x: n % x, range(2, n)))

list_nums = list(range(1, 10001))

shuffle(list_nums)

list_nums = list_nums[:int(input('Введите количество спортcменов (не более 10000): '))]

prime_nums = list(set(map(isprime, list_nums)))

prime_nums.remove(0)

print('Набор номеров всех спортcменов:', *list_nums)

if len(prime_nums) != 0:

   print('Набор всех простых номеров:', *prime_nums)

   print('Наибольший простой номер:', max(prime_nums))

else:

   print('В данном списке нет простых номеров.')

P.S Номера генерируются от 1 до 10000, причем у каждого спортсмена будет уникальный номер, номера повторяться НЕ МОГУТ.    

Приложения:
Вас заинтересует