Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/302: Рейтинг темы: голосов - 302, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 20

Вывести все автоморфные числа, не превосходящие N

25.02.2018, 12:33. Показов 65281. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Напишите пожалуйста программу с объяснением .
Натуральное число называется автоморфным, если оно равно последним цифрам своего квадрата. Например, 25^2 = 625. Напишите программу, которая получает натуральное число N и выводит на экран все автоморфные числа, не превосходящие N.

Пример:

Введите N:

1000

1*1=1

5*5=25

6*6=36

25*25=625

76*76=5776
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.02.2018, 12:33
Ответы с готовыми решениями:

Вывести все симметричные числа, не превосходящие N
Вывести все симметричные числа, не превосходящие N. Напишите, пожалуйста, программу с объяснением. Заранее спасибо.

Вывести все автоморфные числа, не превосходящие введенное
Напишите программу, которая запрашивает натуральное число N и выводит на экран все автоморфные числа, не превосходящие N. Автоморфным...

Вывести все натуральные числа, не превосходящие N
Ввести натуральное число N и вывести все натуральные числа, не превосходящие N и делящиеся на каждую из своих цифр. Помогите пожалуйста ...

9
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
25.02.2018, 17:34
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
number = 1000  # int(input())
 
 
def get_numbers_count(number):
    """
    Получить количество цифр в числе.
    :param number: Число, кол-во цифр в котором нужно подсчитать
    :return: Например, для числа 1000 вернёт 4, для числа 777 вернёт 3 и т.д.
    """
    count = 0
    while number:
        count += 1
        number = number // 10
    return count
 
 
def get_automorphic_numbers(max_number):
    """
    Найти все автоморфные числа в диапазоне от 1 до заданного в параметрах max_number
    :param max_number: Максимальное число, являющееся ограничением диапазона поиска всех автоморфных чисел
    :return: Возращает генератор, которые позволяет перечислить все автоморфные
    числа не записывая их все сразу в память
    """
    for x in range(1, max_number + 1):
        square = x * x
        length_of_x = get_numbers_count(x)
 
        num_divider = 10 ** length_of_x
        num = square % num_divider
 
        if num == x:
            yield num
 
 
for x in get_automorphic_numbers(number):
    print(x, "*", x, "=", x * x)
Вывод:
1 * 1 = 1
5 * 5 = 25
6 * 6 = 36
25 * 25 = 625
76 * 76 = 5776
376 * 376 = 141376
625 * 625 = 390625
1
 Аватар для Vigi
641 / 481 / 179
Регистрация: 28.05.2012
Сообщений: 1,419
26.02.2018, 07:15
Через строки:
Python
1
2
3
4
5
6
7
8
9
def a_number(i):
    tmp = int(i) ** 2
    return True if str(tmp)[-len(i):] == i else False
 
 
n = input('N=')
for i in range(1, int(n) + 1):
    if a_number(str(i)):
        print(f'{i}*{i}={i * i}')
1
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
26.02.2018, 23:57
Смотрю тут краткость в почёте. Окей:
Python
1
2
number = 1000  # int(input())
[print(f'{x} * {x} = {x * x}') for x in filter((lambda n: str(n * n).endswith(str(n))), range(1, number + 1))]
Ну, или уж совсем, чтобы прямо в одну строчку, как положено и с вводом пользователя:
Python
1
[print(f'{x} * {x} = {x * x}') for x in filter((lambda n: str(n * n).endswith(str(n))), range(1, int(input()) + 1))]
Добавлено через 20 минут
Мир перевернулся. Короткий способ со строкой ещё и работает быстрее, прогнал его в профайлере в цикле 10000 раз по два раза каждый вариант (первый раз, второй раз: 8697, 9846) без вызова в обоих случаях print:
Первый (длинный) способ:
Own time (ms) 8697, 9846
Time (ms) 31930, 32410

Второй (короткий) способ:
Own time (ms) 8679, 8891
Time (ms) 26141, 26725
0
Модератор
Эксперт функциональных языков программирования
3135 / 2282 / 469
Регистрация: 26.03.2015
Сообщений: 8,884
27.02.2018, 01:38
Casper-SC,
Можете ещё такой способ замерить?
Python
1
2
3
4
5
6
7
8
def f3(n):
    p = 10
    for x in range(1, n+1):
        if x >= p:
            p *= 10
        a = 2*x - 1
        if (a*a - 1) % (4*p) == 0:
            print(f"{x}*{x} = {x*x}")
1
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
27.02.2018, 02:17
Замерял так:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
n = 1000
def f3(n):
    p = 10
    for x in range(1, n+1):
        if x >= p:
            p *= 10
        a = 2*x - 1
        if (a*a - 1) % (4*p) == 0:
            x
            # print(f"{x}*{x} = {x*x}")
 
 
for m in range(10000):
    f3(n)
Own time (ms) 3341
Time (ms) 6679
Неплохо
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
27.02.2018, 08:51
А что тормозит? yield
1
Модератор
Эксперт функциональных языков программирования
3135 / 2282 / 469
Регистрация: 26.03.2015
Сообщений: 8,884
27.02.2018, 09:56
Цитата Сообщение от Casper-SC Посмотреть сообщение
Замерял так
Для бóльших n разница должна быть больше.
В моём варианте 1 деление. А для перевода числа в строку требуется по 1 делению на каждую цифру.
0
Модератор
Эксперт функциональных языков программирования
3135 / 2282 / 469
Регистрация: 26.03.2015
Сообщений: 8,884
27.02.2018, 12:11
Более быстрый вариант:
Python
1
2
3
4
5
6
7
8
9
10
def f6(n):
    res = [0]
    p = 1
    while True:
        k = len(res)
        for x in (i*p + res[j] for i in range(1,10) for j in range(0,k)):
                if x > n: return res
                if x*(x - 1) % (10*p) == 0:
                    res.append(x)
        p *= 10

Code
1
[0, 1, 5, 6, 25, 76, 376, 625, 9376, 90625, 109376, 890625, 2890625, 7109376, 12890625, 87109376, 212890625, 787109376, 1787109376, 8212890625, 18212890625, 81787109376, 918212890625]

з.ы. Предыдущий "быстрый" вариант был не совсем корректен, хоть и выдавал правильный ответ. Поэтому я его удалил и заменил на этот.
Для n = 1000000000000 решение выдаёт мгновенно.
0
0 / 0 / 0
Регистрация: 30.01.2022
Сообщений: 6
30.01.2022, 23:28
Python
1
2
3
4
5
6
7
8
9
keyboard = input("значение:")
note = ""
for action in range (1,int(keyboard)+1):
    result = str(action**2)
    for event in range(len(result)-len(str(action)),len(result)):
        note += result[event]
        if note==str(action):
            print("найдено:",str(action))
        note = ""
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.01.2022, 23:28
Помогаю со студенческими работами здесь

Найти все автоморфные числа в интервале [m, n]
Автоморфным называется такое число, которое равно последним цифрам своего квадрата. Требуется найти все автоморфные числа в интервале . ...

Вывести на экран все автоморфные числа, не превосходящие N
Автоморфные* числа. Натуральное* число* называется* автоморфным,* если* оно* равно* по‐ следним*цифрам*своего*квадрата.*Например,...

Ввести натуральное число и вывести на экран все автоморфные числа, не превосходящие этого числа
Натуральное число называется автоморфным, если оно равно последним цифрам своего квадрата. Например, 25^2 = 625. Напишите программу,...

Вывести автоморфные числа, не превосходящие заданного n
Натурально число называется автоморфным, если оно равно последним цифрам своего квадрата. Например 252 = 625. Напишите программу, которая...

Кубические автоморфные числа равны последним цифрам своих кубов. Например: б3 = 216, найти все кубические автоморфные числа не превышающие 999
Кубические автоморфные числа равны последним цифрам своих кубов. Например: б3 = 216, найти все кубические автоморфные числа не превышающие...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru