Найти простое число без использования def ()? - PullRequest
0 голосов
/ 14 октября 2018

Кажется, что многие ответы на поиск простых чисел в диапазоне связаны с функцией определения, но я не понимаю, почему то, что я положил ниже, не работает?

for num in range(3,1000):
    x=int in range(2,num)
    if num%x!=0:
        print(num)

Ошибка, которую я получаюэто

Traceback (most recent call last):
  File "C:/Users/Jack/PycharmProjects/beginnerworkeraseanddoanything/venv/numbers.py", line 4, in <module>
    if num%(x)!=0:

ZeroDivisionError: integer division or modulo by zero

, что не имеет смысла для меня.Я чувствую, что должен получить ошибку, связанную с тем фактом, что число может быть как истинным, так и ложным в отношении моего кода (т.е. 10% 5 равно 0, а 10% 3 равно 1), но вместо этого я получаю ошибку выше.

Ответы [ 3 ]

0 голосов
/ 14 октября 2018

Я думаю, что вы хотите:

for i in range(3, 100):
    for j in range(2, i):
        if i % j == 0:
            break
    else:
        print(i)

Но использовать этот способ, чтобы найти простое число слишком медленно (также пропустил простое число 2).Вы можете использовать генератор, чтобы найти простое число в Python.Таким образом

def _odd_iter():
    n = 1
    while True:
        n += 2
        yield n

def _not_divisible(n):
    return lambda x: x % n > 0

# prime number generator
def primes():
    yield 2
    iter = _odd_iter()
    while True:
        n = next(iter)
        yield n
        iter = filter(_not_divisible(n), iter)

def generate_primes_list(n):
    primes_list = []
    for prime in primes():
        if prime < n:
            primes_list.append(prime)
        else:
            break
    return primes_list
0 голосов
/ 14 октября 2018

Ответ Киндалла правильный, потому что вы получаете сообщение об ошибке.Если вы пытаетесь найти простые числа «не определяющие какую-либо функцию, т.е. не использующие def ()», вы можете попробовать этот код, который я написал некоторое время назад:

top= 1000
primes=[]
for i in range(2,top):  #start from 2 to max number
    add=True
    for j in range(1,int(math.sqrt(i))+1): 
        """
        property of primes, refer to number theory: 
        https://math.stackexchange.com/questions/63276/is-a-prime-factor-of-a-number-always-less-than-its-square-root
        """

        if(j!=1 and i!=j and i%j==0): #this could have been done better
            add=False
            break

    if(add):

        primes.append(i)

print (primes)
print (len(primes))
0 голосов
/ 14 октября 2018

x=int in range(2,num) равно False, поскольку тип int не находится в диапазоне от 2 до num.False - это просто причудливое имя для 0, поэтому num%x - это деление на ноль.Ваша ошибка не имеет ничего общего с тем, что она не в функции.

Я не уверен, что вы пытаетесь сделать с x=int in range(2,num), поэтому я не могу предложить, как это исправить.

...