Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/40: Рейтинг темы: голосов - 40, средняя оценка - 4.78
50 / 37 / 9
Регистрация: 25.06.2014
Сообщений: 406

Процесс выполнения занимает много времени

09.08.2015, 21:31. Показов 7443. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
ЗадачаТройка Пифагора - три натуральных числа a < b < c, для которых выполняется равенство https://www.cyberforum.ru/cgi-bin/latex.cgi?{a}^{2} + {b}^{2} = {c}^{2}

Например, https://www.cyberforum.ru/cgi-bin/latex.cgi?{3}^{2} + {4}^{2} = 9 + 16 = 25 = {5}^{2}.

Существует только одна тройка Пифагора, для которой a + b + c = 1000.
Найдите произведение abc.


Можно ли ее как-то решить, чтобы процесс выполнения занимал меньше времени?

Мое решение
Python
1
2
3
4
5
6
7
8
9
10
check = None
for a in range(1, 500):
    if check: break
    for b in range(1, 500):
        if check: break
        for c in range(1, 500):
            if a ** 2 + b ** 2 == c ** 2 and a + b + c == 1000:
                print(a, b, c)
                check = True
                break


Добавлено через 1 минуту
Мой результат : 200 375 425
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.08.2015, 21:31
Ответы с готовыми решениями:

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

Как узнать, какой процесс занимает много памяти?
на хостинге есть сайт ! какой то скрипт кушает очень много памяти и забивает ей спустя 2 часа и сайт ложится ! реально ли как то через...

Функция занимает много времени
Добрый день. Есть функция по уменьшению картинки: function image_resize( $source_path, $destination_path, $newwidth, ...

8
Заблокирован
09.08.2015, 21:35
Да, думаю можно.
0
50 / 37 / 9
Регистрация: 25.06.2014
Сообщений: 406
09.08.2015, 21:36  [ТС]
Есть предположения как?
0
Эксперт Pascal/Delphi
 Аватар для mmm_corp
103 / 91 / 32
Регистрация: 30.05.2015
Сообщений: 594
09.08.2015, 21:44
Лучший ответ Сообщение было отмечено SashaPl как решение

Решение

у вас обработка идет в 1 поток, плохо....

нужно разбить цикл на диапазоны, каждый в отдельном потоке (это сугубо програмиское решение в лоб...)
думаю есть и математические решения, напр. взять по диапазонах 1..100, проверить... многовато... 50 проверяем и 90, 90 многовато 50 мало, берем 80 и 60.... ну думаю математически примерно так должно быть, полагаю с таким подходом сечений по диапазонам в пару итерацый можно уложится
0
Заблокирован
09.08.2015, 21:51
SashaPl, конечно есть. Я даже их приведу на всякий случай, хотя вы про это и не спрашивали. Тут два пути, программно и аппаратно. Какой путь использовать решать вам. Я бы использовал программный путь.
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
10.08.2015, 07:52
Цитата Сообщение от SashaPl Посмотреть сообщение
for a in range(1, 500):
* * if check: break
* * for b in range(1, 500):
* * * * if check: break
* * * * for c in range(1, 500):
Ох ты ж мама родная.
А учесть, что с=1000-a-b?

Это то, что просто бросается в глаза. Если подумать, то можно и ещё ускорить.
0
2 / 2 / 1
Регистрация: 09.04.2015
Сообщений: 52
10.08.2015, 14:40
1. Проверки check - бессмысленные.

Python
1
2
3
4
5
6
for a in range(1, 500):
    for b in range(1, 500):
        for c in range(1, 500):
            if a ** 2 + b ** 2 == c ** 2 and a + b + c == 1000:
                print(a, b, c)
                break
2. Цикл сильно рандомный, а по последней проверке - он может работать и час, но так и не найдёт нужный ответ, а может найти и в первой же обработке.
0
0 / 0 / 0
Регистрация: 08.03.2019
Сообщений: 4
20.07.2020, 22:37
Несмотря на то, что ветка была активна аж в 2015, внесу также и свою лепту.

Первое, что бросилось в глаза - границы цикла со счётчиком. Да, 500 - допустимое значение (ведь необходимая сумма равна 1000, а сумма обозначенных вами пределов равна 1500), но, чисто по моему мнению, раз мы пишем лишь алгоритм, а конкретно задачу решает сам пк, то стоит этого избежать.

Предлагаю вот такой код:

Python
1
2
3
4
5
6
7
8
9
10
11
from sys import exit
 
a = 1
 
while a > 0:
    for b in range(1, a):
        c = (a ** 2 + b ** 2) ** 0.5
        if ( c % 1 == 0 ) and (a + b + c == 1000):
            print(a, '^2 + ', b, '^2 = ', int(c), '^2\na * b * c = ', int(a * b * c), sep='')
            exit()
    a += 1
Профайлер в PyCharm выдал 0,137 секунд
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
21.07.2020, 10:01
А как вам такое?

Python
1
2
3
4
5
6
7
8
9
m = 3
 
while (a := 2 * m) + (b := m**2 - 1) + (c := m**2 + 1) < 1000:
    if (k := 1000 / (a + b + c)).is_integer():
        a, b, c = a * k, b * k, c * k
        break
    m += 1
 
print(a, b, c)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.07.2020, 10:01
Помогаю со студенческими работами здесь

Создание массива занимает много времени
Здравствуйте. Нужен совет. В процессе написания некой программы, возникла надобность в создании больших массивов объектов типа Label. В...

OpenXML, Dispose занимает, много времени
В программе происходит подключение к файлам несколько раз(около 60) using (var doc = WordprocessingDocument.Open(filePath_, true)) ...

Удаление строк занимает слишком много времени
Привет всем! Помогите справится с проблемой. Есть Excel таблица, в таблице 10000-30000 строк. Происходит поиск значений и при...

Переход в гибернацию занимает слишком много времени
Раньше такого не было, а сейчас уходит до 1 минуты! Или даже больше, точно не засекал - раньше 15 сек примерно!

Деление больших чисел занимает много времени
Привет всем. Написал функцию для деления больших чисел, но к сожалению вычисления идут очень долго. Может кто-нибудь помочь с переделкой...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru