查找集合的三元组,Python

时间:2015-02-05 22:02:41

标签: python math set triplet

这是我的任务:

  

求三元组a,b,c∈{x | x∈Z且450> x> 0}

     

满足以下关系:

     
      
  1. a =如果b是偶数:c + 11但是   如果b是奇数:2c-129

  2.   
  3. b =(a * c)mod 2377

  4.   
  5. c =(从k = 0到a-1的b-7k的总和)+ 142
  6.   

这是我到目前为止所尝试的:

备选方案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 个答案:

答案 0 :(得分:0)

请多付出努力。第一个程序打印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的检查稍微复杂一些,但只需稍加努力,您就可以对其进行管理。