Простое число По введённому натуральному числу K, не превосходящему 100000, выдать K-е по счёту простое число.
Входные данные
Дано натуральное число K.
Выходные данные
Выведите K-е простое число.
Примеры
Ввод
Вывод
3
5
1
2
Ограничения
Время выполнения: 3 секунды
n=int(input())
count=0
number=0
while count<=n:
simple=True
number+=1
for i in range(2,number//2 + 1):
if number%i==0:
simple=False
break
if simple:
count+=1
print(number)
Первая - прямой перебор, но хорошо оптимизированный: с целочисленным вычислением корня для короткой схемы на квадратах. У меня на компьютере работает впритык, за 2.8 для 100k. Если бы не питон - укладывалось бы, но лень переписывать. На тестовом сервере скорее всего не уложится в таймлимит, просто для информации, что так тоже можно:
def prime_count(N):
primes = [2, 3]
i, s, s2 = 5, 3, 9
while len(primes) < N:
while s2 <= i:
s += 1
s2 = s*s
flag = True
for p in primes:
if p > s+1:
break
if i % p == 0:
flag = False
break
if flag:
primes.append(i)
i += 2
return primes[N-1]
print(prime_count(int(input(
Вторая: обычное решето Эратосфена. Сравни, насколько короче получилось =) Число 13 выведено эмпирически, для K<=100000 оно подходит, но потом будет маленьким. В общем случае там должна стоять величина log2(N) с каким-то множителем по теореме о плотности простых чисел. Для 100k работает раз в 15 быстрее, так что в лимит уложится точно:
def eratosthenes(N):
i, numbers = 0, [True] * (13 * N)
for index in range(N):
while not numbers[i]: i += 1
numbers[i::i+2] = [False] * len(numbers[i::i+2])
return i+2
print(eratosthenes(int(input(