Амир хочет подарить Ляйсан n капибар, пронумерованных натуральными числами от 1 до n.
Ляйсан не может оставить всех капибар у себя, так как любые две капибары, у которых сумма номеров кратна разности номеров, будут ссориться. Капибар, которых она не сможет у себя оставить, она подарит ответственным друзьям.
Амир знает, что Ляйсан оставит у себя как можно больше капибар. Помогите Амиру узнать номер грызунов, которых Ляйсан оставит у себя.
Номер примера 1, значение n 3, номера капибар
python
def sieve(n):
is_prime = [True] * (n+1)
is_prime[0] = is_prime[1] = False
p = 2
while p*p <= n:
if is_prime[p]:
for i in range(p*p, n+1, p):
is_prime[i] = False
p += 1
return is_prime
def find_capybaras(n):
is_prime = sieve(n)
capybaras = []
for i in range(1, n+1):
if not is_prime[i]:
continue
for j in range(1, n):
if i-j > 1 and i-j < n and (i+j) % (i-j) == 0:
break
else:
capybaras.append(i)
return capybaras
n = int(input("Введите число n: "))
capybaras = find_capybaras(n)
print("Номера капибар, которых Ляйсан оставит у себя:", capybaras)
Если вам интересно, как работает решето Эратосфена, вот краткое объяснение алгоритма:
1. Создаем список is_prime длиной n+1 и заполняем его значениями True.
2. Для всех чисел от 0 до 1 ставим значения False, так как они не являются простыми.
3. Устанавливаем переменную p = 2 (первое простое число).
4. Пока p * p <= n:
1. Если is_prime[p] == True (число p является простым):
1. Для всех чисел p * p, p * (p+1), p * (p+2), ..., n со шагом p ставим значения False, так как они являются кратными p и не являются простыми.
2. Увеличиваем p на 1.
5. Возвращаем список is_prime.
При использовании решета Эратосфена, мы можем получить список всех простых чисел от 2 до n за время O(n*log(log(n))).
Теперь рассмотрим сложность алгоритма для решения задачи.
1. Построение списка is_prime для решета Эратосфена занимает время O(n*log(log(n))).
2. Проход по всем числам от 1 до n и проверка кратности занимает время O(n^2).
3. Добавление номеров капибар в список занимает время O(1).
4. Вывод списка занимает время O(n).
В итоге, общая сложность решения задачи составляет O(n^2), что является достаточно эффективным решением, так как значение n ограничено 100.
Важно отметить, что вышеуказанное решение позволяет найти номера капибар, которые Ляйсан сможет оставить у себя, но не дает полного ответа на вопрос Амира. Чтобы получить номера капибар, которые Ляйсан оставит у себя, нужно просто вывести список capybaras.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет