Найти - Пользователи
Полная версия: Определение простое число или нет
Начало » Центр помощи » Определение простое число или нет
1 2 3
baa
еще немножечко
def isPrm(x):
if x < 2 or (x > 2 and x % 2 == 0): # работает и без скобок, скобки для наглядности
return False
for i in xrange(3, int(x**0.5) + 1, 2):
if x % i == 0:
return False
return True
Isem
вместо
baa
x % 2 == 0
пишем
x&1==0
terabayt
Здравствуйте, подскажите пожалуйста, как проверить число целое или нет?
Я делал так -
if type(x)==int:

А если x = math.sqrt(4), то
type(x) - float
Зарание спасибо!
py.user.next
py.user.next
    if x > 3 and x % 2 == 0 or x <= 1:
return False
эта проверка на чётность имеет один недостаток
если число больше трёх и не делится на два, то оно сравнивается с единицей
а зачем его сравнивать с единицей, если оно уже больше трёх ?

можно сделать:
если число больше трёх и не делится на два, то выполнить цикл
иначе сравнить его с единицей

def isprime(x):
if x > 3:
if x % 2 == 0:
return False
for i in range(3, int(x ** 0.5) + 1, 2):
if x % i == 0:
return False
elif x <= 1:
return False
return True

print(isprime(121))
baa, у тебя тройка зачем-то на два делится
потом ещё для любого числа проверяется, не превышает ли оно двойку
если в функцию будут подавать много-много больших чисел, то все они будут сравниваться с двойкой, первым делом проверяясь на нахождение слева от неё на числовой оси
то есть ты предполагаешь, что функция будет иметь дело с числами меньшими двух чаще, чем она будет иметь дело с числами большими двух

Isem
пишем
x&1==0
а потом ещё равно убрать и сидеть загадки разгадывать потом через полгода
эта запись затемняет код, а ускорение ещё надо доказать
baa
def isPrm(x):

if x % 2 and x > 2:

for i in xrange(3, int(x**0.5) + 1, 2):

if x % i == 0:

return False

elif x != 2:

return False

return True

print isPrm(21)
Isem
py.user.next
Isem написал:

пишем
x&1==0
а потом ещё равно убрать и сидеть загадки разгадывать потом через полгода
эта запись затемняет код, а ускорение ещё надо доказать
Да, сложно заниматься программированием не зная элементарную двоичную логику.
py.user.next
Isem
Да, сложно заниматься программированием не зная элементарную двоичную логику.
если код заставляет думать, то он плохо написан
Isem
py.user.next
если код заставляет думать, то он плохо написан
или есть пробелы в образовании
agalen
Диапазон можно уменьшить: вместо
xrange(3, int(x**0.5) + 1, 2)
достаточно
xrange(3, int(math.sqrt(x)), 2)
py.user.next
agalen, зачем операцию возведения в степень заменять на вызов функции ?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB