Найти триплет для множества, Python
Это мое назначение:
Найдите триплет a, b, c ∈ {x | x ∈ Z и 450 > x > 0}
Таковы следующие отношения:
a = если b четное: c+11 НО, если b нечетное: 2c-129
b = (a * c) мод 2377
- 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
немного сложнее, но с небольшим усилием, вы можете справиться с этим.