Тема: Проєкт Ейлера завдання 9

Ось такий код у відповідь на завдання

def foo():
    for a in range(1, 1001):
        for b in range(a+1, 1001):
            c = 1000 - b - a
            if a * a + b * b == c * c:
                print(a, b, c)
                print(a * b * c)
                return

foo()

Але після додання рядка друку змінної с всередині другого циклу, програма перестає працювати. З чим це може бути звязано? Якщо не можете пояснити то дайте напрямок

2

Re: Проєкт Ейлера завдання 9

Ось Вам напрям:

Посирання на англомовні ресурси

3

Re: Проєкт Ейлера завдання 9

romanyshyn209 написав:
Прихований текст

Ось такий код у відповідь на завдання

def foo():
    for a in range(1, 1001):
        for b in range(a+1, 1001):
            c = 1000 - b - a
            if a * a + b * b == c * c:
                print(a, b, c)
                print(a * b * c)
                return

foo()

Але після додання рядка друку змінної с всередині другого циклу, програма перестає працювати. З чим це може бути звязано? Якщо не можете пояснити то дайте напрямок

Мені здається ви наплутали щось із відступами. В Python це важливо.
Як саме Ви додаєте рядок? Приклад коду потрібно викладати повністю

Подякували: koala1

4

Re: Проєкт Ейлера завдання 9

Якщо програма просто перестає працювати, то, швидше за все, на вашому комп'ютері апаратна проблема.
А от якщо завершує роботу з повідомленням про помилку, то закінчуйте грати в партизана і пишіть по-людськи, яку саму.

5

Re: Проєкт Ейлера завдання 9

Додаю рядок таким чином:

def foo():
    for a in range(1, 1001):
        for b in range(a+1, 1001):
            c = 1000 - b - a
            print(c)
            if a * a + b * b == c * c:
                print(a, b, c)
                print(a * b * c)
                return

foo()

Програма виводить на екран багато чисел і я змушений зупиняти її шляхом Ctrl + C.

6

Re: Проєкт Ейлера завдання 9

Якщо на
https://www.programiz.com/python-progra … -compiler/
онлайн компіляторі запустити то видає просто купу чисел від 997 до 171 (останній приклад).

7

Re: Проєкт Ейлера завдання 9

Ось про це я і говорю

8

Re: Проєкт Ейлера завдання 9

DefineC написав:

Якщо на
https://www.programiz.com/python-progra … -compiler/
онлайн компіляторі запустити то видає просто купу чисел від 997 до 171 (останній приклад).

А якщо забрати print(c) то все добре

9

Re: Проєкт Ейлера завдання 9

Я не прогер, тому міг погано зрозуміти, що Вам потрібно

Спробував на С++ (в тому ж онлайн-компілері). Результати розходяться (як із першим варінтом python (200 375 425
31875000), так і з другим (ті числа) )
значить проблема або в ітнерпретаторі, або як написали вище у відступах, або десь помилка.

P.S. Ви це мали на увазі? C++

#include <iostream>
using namespace std;
void foo()
{
    int c=0;
    for (int a=1; a<=1001; a++){
        for (int b=a+1; b<=1001; b++)
        {   
            c = 1000 - b - a;
            cout << "c = " << c << ";"<< endl;
            if ((a * a + b * b) == (c * c)){
                cout << "abc: " << a << "; " << b<< "; " << c << ";" << endl;
                cout << "a*b*c = " << (a * b * c) << ";" << endl; 
                return;
            }
        }
    }
    return;
}
main()
{
    foo();
    return 0;
}

10

Re: Проєкт Ейлера завдання 9

DefineC написав:

Я не прогер, тому міг погано зрозуміти, що Вам потрібно

Спробував на С++ (в тому ж онлайн-компілері). Результати розходяться (як із першим варінтом python (200 375 425
31875000), так і з другим (ті числа) )
значить проблема або в ітнерпретаторі, або як написали вище у відступах, або десь помилка.

P.S. Ви це мали на увазі? C++

#include <iostream>
using namespace std;
void foo()
{
    int c=0;
    for (int a=1; a<=1001; a++){
        for (int b=a+1; b<=1001; b++)
        {   
            c = 1000 - b - a;
            cout << "c = " << c << ";"<< endl;
            if ((a * a + b * b) == (c * c)){
                cout << "abc: " << a << "; " << b<< "; " << c << ";" << endl;
                cout << "a*b*c = " << (a * b * c) << ";" << endl; 
                return;
            }
        }
    }
    return;
}
main()
{
    foo();
    return 0;
}

короче будемо рахувати це парадоксом ;)

11

Re: Проєкт Ейлера завдання 9

romanyshyn209 написав:

програма перестає працювати. З чим це може бути звязано?

romanyshyn209 написав:

я змушений зупиняти її шляхом Ctrl + C.

romanyshyn209 написав:

короче будемо рахувати це парадоксом ;)

Просто неймовірно складний парадокс. Пане, ви свій IQ перевіряли? Якщо нижчий за 85, то програмуванням вам займатися не варто.

Подякували: romanyshyn2091

12

Re: Проєкт Ейлера завдання 9

koala написав:
romanyshyn209 написав:

програма перестає працювати. З чим це може бути звязано?

romanyshyn209 написав:

я змушений зупиняти її шляхом Ctrl + C.

romanyshyn209 написав:

короче будемо рахувати це парадоксом ;)

Просто неймовірно складний парадокс. Пане, ви свій IQ перевіряли? Якщо нижчий за 85, то програмуванням вам займатися не варто.

Дуже низько з вашого боку переходити на особистості :)

Подякували: Q-bart1

13

Re: Проєкт Ейлера завдання 9

Прихований текст

в мене 90, тому я успішний веб-орангутан

Подякували: 0xDADA11C7, romanyshyn2092

14

Re: Проєкт Ейлера завдання 9

FakiNyan написав:
Прихований текст

в мене 90, тому я успішний веб-орангутан

confused unga-bunga *CRAZY*

15 Востаннє редагувалося Droid 77 (29.01.2021 20:45:33)

Re: Проєкт Ейлера завдання 9

Рішення раз:

Завдання 9. Особлива трійка Піфагора
# Проект Ейлера. Умова:
# Трійка Піфагора - три натуральних числа a<b<c, для яких виконується рівність
# a^2 + b^2 = c^2
# Наприклад, 3^2 + 4^2 = 9 + 16 = 25 = 5^2.
# Існує тільки одна трійка Піфагора, для якої a + b + c = 1000.
# Знайдіть добуток abc.
# Рішення:
def compute():
    PERIMETER = 1000
    for a in range(1, PERIMETER + 1):
        for b in range(a + 1, PERIMETER + 1):
            c = PERIMETER - a - b
            if a * a + b * b == c * c:
                return str(a * b * c)


if __name__ == "__main__":
    print(compute())

Рішення два:

Завдання 9. Особлива трійка Піфагора
# Проект Ейлера. Умова:
# Трійка Піфагора - три натуральних числа a<b<c, для яких виконується рівність
# a^2 + b^2 = c^2
# Наприклад, 3^2 + 4^2 = 9 + 16 = 25 = 5^2.
# Існує тільки одна трійка Піфагора, для якої a + b + c = 1000.
# Знайдіть добуток abc.
# Рішення:
def listmult(lst):
    s=1
    for i in lst:
        s*=i
    return s

def fibs(stop,step):
    p=step
    fib=[]
    while True:
        for n in range(p-(p-1),p):
            for m in range(p-(p-2),p+1):
                if m>n:
                    fib=[2*n*m,(m**2)-(n**2),(m**2)+(n**2)]
                    if sum(fib)==stop:
                        return listmult(fib)
        p+=step
print(fibs(1000,100))

В обох рішеннях відповідь дорівнює 31875000.
І ніякого парадоксу тут немає.

16 Востаннє редагувалося lucas-kane (29.01.2021 22:07:10)

Re: Проєкт Ейлера завдання 9

romanyshyn209 написав:
Прихований текст

Додаю рядок таким чином:

def foo():
    for a in range(1, 1001):
        for b in range(a+1, 1001):
            c = 1000 - b - a
            print(c)
            if a * a + b * b == c * c:
                print(a, b, c)
                print(a * b * c)
                return

foo()

Програма виводить на екран багато чисел і я змушений зупиняти її шляхом Ctrl + C.

Скрипт завершить роботу. Для цього йому потрібен час, якого ви йому не даєте. Тут із майже 500 тис. ітерацій циклу програма має виконати, якщо бути точним 179275 ітерацій, (близько 180 тис. ітерацій).

Підсумую, це ніякий не парадокс. А якщо взяти до уваги те, що Python це інтерпретована мова програмування та - те, що йому потрібно вивести на екран повідомлення 180 тис. разів (Хоча для чого Вам ці результати?) це звичайно займе якийсь час. Під час виконання скрипту та виводу в консоль результатів скрипту може здатись ілюзія зациклення.

Спробуйте результат вивести до файлу:

py main.py > out.txt

17

Re: Проєкт Ейлера завдання 9

DefineC написав:
Прихований текст

Я не прогер, тому міг погано зрозуміти, що Вам потрібно

Спробував на С++ (в тому ж онлайн-компілері). Результати розходяться (як із першим варінтом python (200 375 425
31875000), так і з другим (ті числа) )
значить проблема або в ітнерпретаторі, або як написали вище у відступах, або десь помилка.

P.S. Ви це мали на увазі? C++

#include <iostream>
using namespace std;
void foo()
{
    int c=0;
    for (int a=1; a<=1001; a++){
        for (int b=a+1; b<=1001; b++)
        {   
            c = 1000 - b - a;
            cout << "c = " << c << ";"<< endl;
            if ((a * a + b * b) == (c * c)){
                cout << "abc: " << a << "; " << b<< "; " << c << ";" << endl;
                cout << "a*b*c = " << (a * b * c) << ";" << endl; 
                return;
            }
        }
    }
    return;
}
main()
{
    foo();
    return 0;
}

range(1, 1001) VS for(int a=1; a<=1001; a++) - Ви проходите більшу кількість ітерацій :)
Звичайно результати будуть відрізнятись. Прочитайте як працює Range у Python