• Предмет: Информатика
  • Автор: petarak20
  • Вопрос задан 5 месяцев назад

Ярослав и модифицированная улитка
ограничение по времени на тест 3.5 секунд
ограничение по памяти на тест 256 мегабайт
вводстандартный ввод
выводстандартный вывод
Все мы знаем, как Ярослав любит математику. Когда Ярослав шёл домой с любимого учебного центра M&C, он увидел улитку, которая ползёт по дереву (не спрашивайте, как он это сделал, поздним вечером). Ярослав несколько дней подряд видел эту улитку и заметил очень странную закономерность, что каждый день улитка поднималась на a сантиметров вверх, а ночью опускалась до ближайшего простого числа. Ярославу интересно на какой высоте будет улитка по окончанию k дней, если в начале первого дня улитка была на высоте 2 сантиметра.

Входные данные
В первой и единственной строке входных данных даны 2 целых числа a(1 ≤ a ≤ 1010), k(1 ≤ k ≤ 1000).

Выходные данные
Выведите одно целое число на какой высоте будет улитка через k дней.​


p15: Интересная задачка

Ответы

Ответ дал: p15
0

Ответ:

def n(h,t):

   i=3

   while h%i:

       i+=2

       if i*i>h: i=h

   return i

a,k=map(int,input().split())

h=2

for i in range(1,k):

   t=h if h>3 else 3

   h+=a

   print("день", i, h)

   if (h+1)%2: h-=1

   while h!=n(h,t):

       h-=2

   print("ночь", i, h)

print("В конце последнего дня", h+a)

Объяснение:

Оставляю специально с отладочными принтами, чтобы понимали что происходит.

Важно понимать что из условия

"в начале первого дня улитка была на высоте 2 сантиметра."

"на какой высоте будет улитка по окончанию" первого дня? Естественно на 2+a

На какой высоте она будет в конце k-того дня? На высоте k-того утра + a


petarak20: а так спасибо чел
p15: здесь можно без массивов.
p15: Укладываешься по времени, просто надо проверять каждый раз только числа с утра до вечера, тогда их не много. И только нечетные
p15: Тебе тогда надо найти гораздо меньше чисел их будет не больше k. А для решета будет больше
p15: ПРОВЕРЯЙ. вроде укладывается. Потом переводи в Си
p15: Для a=1010 k=1000
...
день 994 994063
ночь 994 994051
день 995 995061
ночь 995 995053
день 996 996063
ночь 996 996049
день 997 997059
ночь 997 997057
день 998 998067
ночь 998 998029
день 999 999039
ночь 999 999029
В конце последнего дня 1000039
p15: 100 5
день 1 102
ночь 1 101
день 2 201
ночь 2 199
день 3 299
ночь 3 293
день 4 393
ночь 4 389
В конце последнего дня 489
p15: Можно сделать быстрее, если решето записать сразу, а не создавать. (Т.е. создать заранее). Не думаю что получится быстрее этого алгоритма, если создавать решето.
p15: в программе лишнее t. осталось от предыдущей идеи
p15: как успехи?
Вас заинтересует