2015-11-01 1 views
0

Я пишу программу, которую я вводил 10, например, и обнаружил нечетное число сначала и четное число и поместил их в список [1,3,5,7,9,2,4 , 6,8,10] и введите другой номер, который выбрать номер в списке, например 3, так что печать 5 и так далее, так что я написать такой кодОшибка памяти Использование intertool в python

from itertools import count 
n,y=map(int, raw_input().split()) # Input the 2 numbers 
listaa=[0,] # list to save 
for x in count(1,1): 
    if x%2!=0: 
     listaa.append(x) 
    if x==n: 
     break 
for h in count(1,1): 
    if h%2==0: 
     listaa.append(h) 
    if h==n: 
     break 
res=listaa[y] 
print res # it print the number that is in the Array or list 

но когда я отправить код на онлайн-судья, попробуйте этот номер 1000000000000 500000000001, чтобы он получил RUNTIME_ERROR, тогда я попробую это на своем затмении. Я получаю сообщение об ошибке памяти. Я сначала попробую Xrange, но я получаю ошибку, когда я нашел найденный генератор, поэтому я пытаюсь его использовать и использовать count вместо Xrange note Предел времени выполнения для каждого тестового случая составляет 1 секунду

+1

Зачем строить списки? Если все, что вам нужно, это число в заданной позиции, то немного математики. – tdelaney

+0

скажите, пожалуйста, как это сделать. –

ответ

0

Вы не можете решить эту проблему, используя этот подход, потому что список очень велик, и это ограничит время, которое вы предположили, что 1000000000000 500000000001 содержит приблизительно 4 * 10^12 номеров, которые нуждаются в более чем терабайте памяти. , поэтому не используйте список вместо математической формулы.

образец кода

n,y=map(int, raw_input().split()) 
first_odd = 1 
last_odd = n if n%2 == 1 else n-1 
n_odd = (last_odd-first_odd)/2 + 1 
if y <= n_odd: 
    print first_odd + 2*(y-1) 
else: 
    y -= n_odd 
    print 2+2*(y-1) 
+0

. Вы правы. Проблема в математике, но можете ли вы сказать мне, какое уравнение я могу решить, чтобы получить решение? –

+0

ok пусть a будет первым нечетным числом в списке b последним нечетным числом. n_odd = b-a + 1, если y <= n_odd, то это нечетное число со значением a + (y-1) * 2. то же самое можно применить к четным числам, но индекс четного числа будет y-n_odd – m7mdbadawy

+0

. Вы также можете реализовать сито Eratosthenes. https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes – mic4ael

Смежные вопросы