Как найти составные числа python

ZhansultanM, У Вас ошибка в условии цикла while.
Простое число, это такое, которое делится только на 1 и на само себя. Как только Вы выясняете, что оно делится еще на какое либо число, то это значит, что оно не простое, то есть составное.
Поэтому цикл while должен прерываться, как только Вы находите число на которое делится “а”.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
def prost_sost(a):
    d=2
    while d <= a-1:
        if a%d == 0:
            break
        else:
            d += 1
    if a == 1 or d == a:
        return ('Prost')
    else:
        return ('Sost')
a=int (input('Enter value: '))
print (prost_sost(a))

Добавлено через 13 минут
Если же Вы выйдите из цикла потому, что d достигло a, т.е. d=a и условие цикла while уже не выполняется, то это значит, что нет другого числа кроме 1 и “а” на которое делилось бы “а”. А это значит, что оно простое.

Напишем программу в Python, в которой будем проверять, является ли заданное число простым числом или нет.

Простые числа:

Если натуральное число больше 1 и не имеет положительных делителей, кроме 1 и самого числа и т. д.

Например: 3, 7, 11 и т. д. — простые числа.

Составное число:

Другие натуральные числа, не являющиеся простыми, называются составными числами.

Например: 4, 6, 9 и т. д. — составные числа.

Давайте посмотрим на следующий пример, чтобы понять реализацию.

Пример

 
# A default function for Prime checking conditions 
def PrimeChecker(a): 
    # Checking that given number is more than 1 
    if a > 1: 
        # Iterating over the given number with for loop 
        for j in range(2, int(a/2) + 1): 
            # If the given number is divisible or not 
            if(a % j) == 0: 
                print(a, "is not a prime number") 
                break 
        # Else it is a prime number 
        else: 
            print(a, "is a prime number") 
    # If the given number is 1 
    else: 
        print(a, "is not a prime number") 
# Taking an input number from the user 
a = int(input("Enter an input number:")) 
# Printing result 
PrimeChecker(a) 

Выход:

Enter an input number:17 
17 is a prime number 

Объяснение:

Мы использовали вложенное условие if else, чтобы проверить, является ли число простым или нет.

Во-первых, мы проверили, больше ли заданное число 1 или нет. Если оно не больше 1, то число сразу попадет в часть else и напечатает «не простое число».

Теперь число войдет в цикл for, где мы выполняем итерацию от 2 до числа/2. Затем мы использовали вложенное условие if else внутри цикла for. Если число полностью делится на «i», то оно не является простым числом; в обратном случае – является простым числом.

Изучаю Python вместе с вами, читаю, собираю и записываю информацию опытных программистов.

Описание задачи

Программа принимает на вход число и проверяет, простое оно или нет.

Решение задачи

  1. Принимаем на вход число и записываем его в отдельную переменную.
  2. Инициализируем переменную, которая будет выполнять роль счетчика, значением 0.
  3. Организуем цикл for в диапазоне от 2 до значения проверяемого числа, деленного на 2 (речь идет, конечно, о целочисленном делении).
  4. Затем находим количество делителей нашего числа. При помощи условного оператора if мы проверяем, делится ли число без остатка, и затем, если делится, увеличиваем наш счетчик на единицу.
  5. Если число делителей равно 0, то проверяемое число является простым.
  6. Выводим результат на экран.
  7. Конец.

Исходный код

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

a = int(input("Введите число: "))
k = 0
for i in range(2, a // 2+1):
    if (a % i == 0):
        k = k+1
if (k <= 0):
    print("Число простое")
else:
    print("Число не является простым")

Объяснение работы программы

  1. Пользователь вводит число, и оно сохраняется в переменную a.
  2. Инициализируем переменную k значением 0. Эта переменная будет выполнять роль счетчика.
  3. Запускаем цикл for в диапазоне от 2 до значения проверяемого числа, деленного на 2 (речь идет, конечно, о целочисленном делении). Напоминаем, что само число и 1 делителями мы считать не будем.
  4. Затем, при помощи инструкции if, на каждой итерации цикла мы проверяем, делится ли наше число без остатка на числа из выбранного диапазона цикла. Если делится, то переменная k, выполняющая роль счетчика, увеличивается на единицу.
  5. Если число делителей равно 0, то проверяемое число является простым.
  6. Выводим полученный результат на экран.

Результаты работы программы

Пример 1:
Введите число: 7
Число простое
 
Пример 2:
Введите число: 35
Число не является простым

Еще более 50 задач на числа в нашем телеграм канале Python Turbo. Уютное сообщество Python разработчиков.

Проверка простоты числа перебором делителей

Решение задачи на языке программирования Python

Простые числа – это натуральные числа больше единицы, которые делятся нацело только на единицу и на себя. Например, число 3 простое, так как нацело делится только на 1 и 3. Число 4 сложное, так как нацело делится не только на 1 и 4, но также на число 2.

Алгоритм перебора делителей заключается в последовательном делении заданного натурального числа на все целые числа, начиная с двойки и заканчивая значением меньшим или равным квадратному корню из тестируемого числа. Таким образом, в данном алгоритме используется цикл, счетчик итераций которого последовательно принимает значения ряда натуральных чисел от 2 до корня из исследуемого числа.

Перебор делителей применяется в том числе для определения, является ли натуральное число простым, или оно является сложным, то есть составным. Касаемо данной задачи, если хотя бы один делитель делит исследуемое число без остатка, то оно является составным. Если ни одного такого делителя не находится, то число признается простым.

from math import sqrt
 
n = int(input())
 
prime = True
 
i = 2
while i <= sqrt(n):
    if n % i == 0:
        prime = False
        break
    i += 1
 
if prime:
    print("Простое число")
else:
    print("Составное число")

В программе мы сначала предполагаем, что введенное число n является простым, и поэтому присваиваем переменной prime значение True. Далее в цикле перебираются делители (переменная i ) от 2-х до квадратного корня из числа n. Как только встречается первый делитель, на который n делится без остатка, меняем значение prime на False и прерываем работу цикла, так как дальнейшее тестирование числа на простоту смысла не имеет.

Если после выполнения цикла prime осталась истиной, сработает ветка if условного оператора. В случае False, поток выполнения заходит в ветку else.

Если знать о такой особенности циклов в Python как возможность иметь ветку else, то код можно упростить, избавившись от переменной prime и ее проверки условным оператором после завершения работы цикла.

from math import sqrt
 
n = int(input())
 
i = 2
while i <= sqrt(n):
    if n % i == 0:
        print("Составное число")
        break
    i += 1
else:
    print("Простое число")

Ветка else при циклах (как while, так и for) срабатывает, если в основном теле цикла не происходило прерывания с помощью break. Если break сработал, то тело else выполняться не будет. При использовании таких конструкций также следует помнить, что если условие в заголовке цикла сразу возвращает ложь (то есть тело цикла не должно выполняться ни разу), код тела else все-равно будет выполнен.

Программы выше будут определять числа 0 и 1 как простые. Это неправильно. Данные числа не являются ни простыми, ни сложными. Для проверки ввода пользователя, можно воспользоваться условным оператором или зациклить запрос числа, пока не будет введено корректное значение:

n = 0
while n < 2:
    n = int(input())

Рассмотрим функцию, которая определяет, является ли число простым:

from math import sqrt
 
 
def is_prime(n):
    i = 2
    while i <= sqrt(n):
        if n % i == 0:
            return False
        i += 1
    if n > 1:
        return True
 
 
a = int(input())
 
if is_prime(a):
    print("Простое число")
else:
    print("Число НЕ является простым")

Здесь нет необходимости в прерывании работы цикла с помощью break, так как оператор return выполняет выход из тела всей функции.

Если цикл полностью отработал, выполнится выражение return True, находящееся ниже цикла. Оно помещено в тело условного оператора, чтобы исключить возврат “истины”, когда в функцию передаются числа 0 или 1. В этом случае функция вернет объект None.

Программа не защищена от ввода отрицательного числа. При этом будет генерироваться ошибка на этапе извлечения квадратного корня.

Нарисуем блок-схему тестирования числа на простоту (без дополнительных проверок и оператора break):

from math import sqrt
 
n = int(input())
 
prime = True
 
i = 2
while i <= sqrt(n) and prime is True:
    if n % i == 0:
        prime = False
    i += 1
 
if prime:
    print("Простое число")
else:
    print("Составное число")

Больше задач в PDF

Presentation on theme: “Python. Lecture 02. Найдите все составные числа меньшие N, которые представимы в виде произведения двух простых чисел.”— Presentation transcript:

1

Python. Lecture 02

2

Найдите все составные числа меньшие N, которые представимы в виде произведения двух простых чисел.

3

#!/usr/bin/env python def primes(N): l = list(range(2,N)) for x in l: n = x while x*n <= N: if x * n in l: remove(x*n) n+=1 return l def doublePrimes(N): ps = primes(N) out = [] for prime in ps: for otherprime in ps[ps.index(prime):]: doublePrime = prime*otherprime if doublePrime < N: out.append(tuple([prime, otherprime, doublePrime])) else: break return out print “Prime multiples under 100” print doublePrimes(100)

4

Python Строки…

5

Unicode & UTF-8 ЭТО РАЗНЫЕ ВЕЩИ!!!

6

Создание строк ’I am a string’ ”I too” ’ ’ ’Do not forget about me! ’ ’ ’ ”””I am a pretty multiline string!””” str([1, 2]) str({‘x’: 1}) ”Don’t forget about me!”

7

Экранированные символы \ ’ ” n t uxxxx Uxxxxxxxx

8

Сырые строки r”Строка” – не экранируются символы >>> s = “t” >>> print(s) >>> s ‘t’ >>> s = r”t” >>> print(s) t >>> s ‘\t’

9

Извлечение данных >>> s = “It’s interesting lecture!” >>> “lecture” in s True >>> s.index(“s”) 3 >>> s.find(“s”) 3 >>> s.index(“!!”) Traceback (most recent call last): File ” “, line 1, in ? ValueError: substring not found >>> s.find(“!!”)

10

«Изменчивость» строк Строки не изменяемы! >>> s = “It’s interesting lecture!” >>> s “It’s interesting lecture!” >>> s[4] ‘ >>> s[4]=’_’ Traceback (most recent call last): File ” “, line 1, in ? TypeError: object doesn’t support item assignment

11

Срезы S = “Python” S[Start:Finish:Step] S[:] #Python “J”+S[1:] #Jyton S[:-1] #Pytho S[::-1] #nohtyP

12

Форматирование строк “%s” % 10 # 10 “%s – %s – %s” % (10, 20, 30) “%(x)s – %(b)s” % {“x” : 19, “b” : “Dad”} “%10d” % 2 # 2

13

Модификация >>> s = ” nt It’s interesting lecture! ntr” >>> s ” nt It’s interesting lecture! ntr” >>> print(s) It’s interesting lecture! >>> s.upper(); ” nt IT’S INTERESTING LECTURE! ntr” >>> s.lower() ” nt it’s interesting lecture! ntr” >>> s.lstrip() “It’s interesting lecture! ntr” >>> s.rstrip() ” nt It’s interesting lecture!” >>> s.strip() “It’s interesting lecture!”

14

Модификация Команды strip, lstrip, rstrip, upper, lower возвращают НОВУЮ строку. НО! >>> s = s.strip() >>> s “It’s interesting lecture!”

15

Модификация >>> xmltags = ” 111 222 ” >>> xmltags.strip(“<>”); ‘a> 111 222</a’ >>> xmltags.strip(” “); ‘b>111 222’ >>> xmltags.strip(” “); ‘111 222’

16

Извлечение данных >>> s = “a,b,cccc,d” >>> s.split(“,”); [‘a’, ‘b’, ‘cccc’, ‘d’] >>> s.split(“, “); [‘a,b,cccc,d’] >>> s.split(“,”, 2); [‘a’, ‘b’, ‘cccc,d’]

17

Join >>> some_list = [‘one’, ‘two’, ‘three’] >>> ‘, ‘.join(some_list) ‘one, two, three’ >>> ”.join(some_list) ‘onetwothree’ >>> some_list2 = [1, 2, 3] >>> ‘, ‘.join(some_list2) Traceback (most recent call last): File ” “, line 1, in ? TypeError: sequence item 0: expected string, int found >>> ‘, ‘.join([str(i) for i in some_list2]) ‘1, 2, 3’

18

Проверка типа содержимого S.isdigit() S.isalpha() …. S.istitle()

19

Unicode (Python 2) >>> u”Привет” u’xf0xd2xc9xd7xc5xd4′ >>> unicode(“Привет”, “koi8-r”) u’u041fu0440u0438u0432u0435u0442′ >>> s = unicode(“Привет”, “koi8-r”) >>> print s.encode(“utf-8”) п÷я─п ╦ п ╡ п ╣ я┌ >>> print s.encode(“koi8-r”) Привет

20

Regexp >>> import re >>> regexp = “{{(.*?)}}” >>> str = “{{this}} is {{strange}} string” >>> for match in re.findall(regexp, str):… print “FIND: “, match… FIND: this FIND: strange

21

Regexp – compiled >>> import re >>> regexp = re.compile(“{{(.*?)}}”) >>> str = “{{this}} is {{strange}} string” >>> for match in regexp.findall(str):… print “FIND: “, match… FIND: this FIND: strange

22

Regexp finditer match search

23

Чтение из файла >>> file_in = open(“test.txt”, “r”) Traceback (most recent call last): File ” “, line 1, in ? IOError: [Errno 2] No such file or directory: ‘test.txt’ >>> file_in = open(“foo.txt”, “r”) >>> str = file_in.read() >>> print str Hello i am pretty file! >>> str.split() [‘Hello’, ‘i’, ‘am’, ‘pretty’, ‘file!’] >>> str.splitlines() [‘Hello’, ‘i am’, ‘pretty ‘, ‘file!’]

24

Запись в файл >>> file_out = open(“test.txt”, “w”) >>> file_out.write(“Test filenNew line”); >>> file_out.close() >>> try:… f = open(“file.txt”, “w”)… f.write(“test”)… finally:… f.close()

25

Работа с файлами файла – 2 read(size) readline(size) readlines(size) writelines

26

Стандартный ввод и вывод #!/usr/bin/env python import sys counter = 1 while True: line = sys.stdin.readline() if not line: break print ”%s: %s” % (counter, line) counter += 1

27

Стандартный ввод import sys for I, line in enumerate(sys.stdin): print “%s: %s” % (I, line) sys.stdout.write(“OK!”)

28

StringIO >>> from StringIO import StringIO >>> str = StringIO(“aaaa”); >>> str.read() ‘aaaa’ >>> str.write(“bbbb”) >>> str >>> print str >>> str.getvalue() ‘aaaabbbb’

29

Urllib >>> import urllib >>> url_file = urllib.urlopen(“http://spbau.ru”) >>> url_file.read(100) ‘<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-str’ >>>

30

ДЗ 1.Вывести греческий алфавит 2.Реализовать длинную арифметику (ЧЕСТНО!) 3.Используя модуль ElementTree, вывести в древовидном виде RSS ленту 4.Подсчитать на странице с результатами поиска Google статистику по доменам первого уровня

Добавить комментарий