查找集合的三元组,Python

Find triplet for set, Python

这是我的作业:

Find the triplet a, b, c ∈ {x | x ∈ Z and 450 > x > 0}

Such that the following relations is satisfied:

  1. a = if b is even: c+11 BUT if b is odd: 2c-129

  2. b = (a * c) mod 2377

  3. c = (Sum of b-7k from k=0 to 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)

None 其中似乎有效。

请再努力一点。第一个程序打印 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_holdsequation_three_holds 的检查稍微复杂一些,但只要稍加努力,您就可以搞定。