Python - Проверьте, являются ли числа в списке факторами числа - PullRequest
0 голосов
/ 14 марта 2010

У меня есть list чисел (integers) (скажем, от 1 до 10).

Они не обязательно последовательные, но в порядке возрастания.

Я несколько раз предлагал пользователю ввести выбор доступных номеров. Когда этот номер введен, он удаляется из списка вместе с любым из его факторов , которые могут быть там.

Я запретил пользователю выбирать простые числа. Однако в какой-то момент времени там могут быть не простые числа, у которых нет оставшихся факторов.

Я относительно новичок в Python, поэтому у меня возникают проблемы с реализацией:

  • Проверка, не осталось ли в выбранном номере факторов (даже если оно не простое).

  • Проверка, остаются ли только простые числа или числа без факторы.

Я думаю об использовании for операторов, но я точно не знаю, как их реализовать. Может кто-нибудь предложить совет или код? Заранее спасибо ...

Ответы [ 3 ]

3 голосов
/ 14 марта 2010

Чтобы проверить, существуют ли какие-либо факторы числа guess, вы можете использовать any():

hasfactors = any(guess % n == 0 for n in numbers)

Чтобы проверить, все ли числа просты, можно использовать all(). (Поскольку вы говорите, что уже запретили пользователю вводить простые числа, я предполагаю, что у вас есть какая-то функция isprime()):

onlyprimes = all(isprime(n) for n in numbers)
2 голосов
/ 14 марта 2010

Для первой проблемы вы могли бы использовать списки для создания нового списка, где каждый элемент не является выбранным числом и не является фактором выбранного числа (см. Код). Сравните это с вашим исходным списком.

$ python
>>> selected_number = 6
>>> [x for x in range(1,11) if selected_number % x]
[4, 5, 7, 8, 9, 10]

Для второй проблемы проверьте, является ли каждый элемент простым. Если нет, проверьте номера без факторов; для каждого элемента вы можете mod просмотреть исходный список и проверить, является ли он списком нулей. Я уверен, что есть более быстрый способ.

1 голос
/ 14 марта 2010

Если L является списком ненулевых чисел, список тех, которые являются факторами числа N, будет:

factors = [x for x in L if N % x == 0]

Список будет просто пустым, если, конечно, N не имеет факторов в L.

Я не уверен, что вы подразумеваете под «числами без факторов», если только вы не имеете в виду «простые числа» (?) - было несколько SO вопросов и ответов по проверке простоты в Python, я бы использовал gmpy.is_prime (из моего расширения gmpy ), но тогда, конечно, я пристрастен; -).

Если вы имеете в виду, «все числа, которые не имеют множителей в L», ну, их бесконечно много, поэтому довольно сложно составить их список. Неограниченный генератор для них:

import itertools

def nofactorsinlist(L):
  for i in itertools.count():
    if any(x for x in L if i % x == 0):
      continue
    yield i

Некоторые оптимизации были бы возможны, но это действительно просто, и я не хочу добавлять сложные оптимизации, не понимая точно, что вы ищете! -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...