【问题标题】:Find triplet for set, Python查找集合的三元组,Python
【发布时间】:2015-02-05 22:02:40
【问题描述】:

这是我的任务:

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

满足以下关系:

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

  2. b = (a * c) mod 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)

它们似乎都不起作用。

【问题讨论】:

  • 问问你的老师。抱歉,我们不会为您完成任务。

标签: python math set triplet


【解决方案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_holdsequation_three_holds 的检查稍微复杂一些,但只要稍加努力,您就可以管理它。

【讨论】:

  • Python 仍然需要计算 449*449*449 次才能输出一个答案?我按照你的例子,它已经运行了很长一段时间了。你有更好的编程方法吗?
  • 您只能遍历ab 并使用ab 的值计算c。那么第三个等式就自动成立了,你只需要循环 449*449 次。
  • 所以,这是我的 if 语句:if (a==c+11 if b%2==0 else a==2*c-129) and (b==(a*c)%2377) and (c==c0+142):,其中 c 是使用代码前面的这个 for 循环计算的:for i in range(0, upper+1): c0 = b-7*k k+=1 使用变量 k、c0、c=0 和上层= a-1 设置在开头。
  • 我猜是c0 += b - 7*k
  • c0 = sum(b-7*k for k in range(a)) + 142if (a==c+11 if b%2==0 else a==2*c-129) and (b==(a*c)%2377) and (c==c0):print(a,b,c) 为我工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多