Найти триплет для множества, Python

Это мое назначение:

Найдите триплет a, b, c ∈ {x | x ∈ Z и 450 > x > 0}

Таковы следующие отношения:

  1. a = если b четное: c+11 НО, если b нечетное: 2c-129

  2. b = (a * c) мод 2377

  3. c = (сумма b-7k от k=0 до a-1) + 142

Это то, что я пробовал до сих пор:

Альтернатива 1:

for a in range(1,449):
    for b in range(1, 449):
        for c in range(1, 449):

            #a
            if b%2==0:
                a=c+11

            elif b%2!=0:
                a=2*c-129

            #b
            b = (a*c)%2377


            #c
            k = 0
            c0=0
            upper = a-1
            for i in range(0, upper+1):
                c0 = b-7*i
                #k+=1
            c = c0 + 142
            print a, b, c

Альтернатива 2:

def a_func(x):
    if (b_func(x)%2==0):
        return c_func(x)+11
    else:
        return 2*c_func(x)-129

def b_func(x):
    return a_func(x)*c_func(x) % 2377

def c_func(x):
    k=0
    c0=0
    upper = a_func(x)-1
    for i in range(0, upper+1):
        c0 = b_func(x) - 7 * k
        k+=1
    return c0+142

def all(x):
    return a_func(x), b_func(x), c_func(x)

for x in range(1, 449):
    print all(x)

Ни один из них, кажется, не работает.

1 ответ

Решение

Пожалуйста, покажите немного больше усилий. Первая программа печатает 449*449*449 строк вывода. Там явно что-то совершенно не так.

Идея, стоящая за этой задачей, состоит в том, что вы должны проверить, выполнены ли три уравнения или нет.

Поэтому основная программа может иметь следующую структуру:

for a in range(1,449):
    for b in range(1, 449):
        for c in range(1, 449):
            if equation_one_holds and equation_two_holds and equation_three_holds:
                print a, b, c

Ваша задача сейчас заключается в реализации проверок. Как подсказка, equation_two_holds может быть (b == (a * c) % 2377), Чеки для equaltion_one_holds а также equation_three_holds немного сложнее, но с небольшим усилием, вы можете справиться с этим.

Другие вопросы по тегам