На вход программе подается натуральное число n <= 109. проверьте, является ли оно простым. выведите yes или no в зависимости от ответа на вопрос задачи. максимальное время работы программы на одном тесте — 0,1 секунды.

Поляков Евгений Александрович

Учитель информатики высшей категории

Проверено учителем

Для решения задачи проверки числа на простоту при n109n is less than or equal to 10 to the nineth power и ограничении времени 0,1 секунды наиболее эффективным методом является проверка делителей до nthe square root of n end-root . Сложность такого алгоритма составляет O(n)cap O open paren the square root of n end-root close paren , что при максимальном nn дает около 31,62231 comma 622 итераций — это значительно меньше допустимого лимита времени. Шаг 1: Обработка краевых случаев Число n<2n is less than 2 по определению не является простым. Если на вход подается 11, программа должна сразу вывести no. Для n=2n equals 2 программа должна вывести yes, так как это единственное четное простое число. Шаг 2: Оптимизация перебора делителей Вместо перебора всех чисел до nn, достаточно проверить делители в диапазоне от 22 до nthe floor of the square root of n end-root end-floor . Если число nn составное, то оно обязательно имеет хотя бы один делитель dd, такой что dnd is less than or equal to the square root of n end-root . Если ни одного такого делителя не найдено, число является простым. Шаг 3: Реализация алгоритма Для повышения скорости можно отдельно проверить делимость на 22, а затем в цикле проверять только нечетные числа с шагом 22. Однако при n=109n equals 10 to the nineth power обычного цикла до корня будет достаточно для соблюдения лимита в 0,1 сек. Пример кода на Python: n = int(input()) if n < 2: print("no") else: d = 2 is_prime = True while d * d <= n: if n % d == 0: is_prime = False break d += 1 print("yes" if is_prime else "no") Ответ: Для проверки числа n109n is less than or equal to 10 to the nineth power на простоту в пределах 0,1 секунды необходимо использовать алгоритм с временной сложностью O(n)cap O open paren the square root of n end-root close paren . Программа должна проверять наличие делителей в интервале [2;n]open bracket 2 ; the square root of n end-root close bracket . Если хотя бы один делитель найден, выводится no, в противном случае — yes. Нужно ли вам оптимизировать этот алгоритм для одновременной проверки множества чисел (например, с помощью решета Эратосфена)?

Форма ответа

Ваш аватар