3

私はプログラミングは初めてですが (Python は私の最初の言語です)、アルゴリズムを設計するのが大好きです。現在、連立方程式 (整数) に取り組んでいますが、特定の問題を解決するための参照が見つかりません。

説明させてください。

私は方程式を持っています(あなたが望むなら、テスト):

raw_input == [(90*x + a) * y] + z

ここで、a は何らかの定数です。

私の問題は、変数 z がフィボナッチ数列と非常によく似た方法でカウントされ、変数 x が z のステップであることです。つまり、これ (フィボナッチ数列の場合) は、z シーケンスの最初の項で x = 0、z シーケンスの 2 番目の項で x = 1 ということです。y について解く必要があります。

z を決定する正確なプロセスは次のとおりです。

where c and d are constants:
#at x = 0
temp = (c+(90*x)) * (d+(90*x))
temp/90 = z(0) 

#at x = 1
new_temp = (c+(90*x)) * (d + (90*x))

new_temp/90 = z(1)  

#for all the rest of the values of z (and x), use:

j = z(@ x=1) - z(@ x=0)
k = j + 180
l = z(@ x=1) + k
print "z(@ x=1) - z(@ x=0) = j"
print "j + 180 = k"
print "k + z(1) = l"
repeat until z > raw_input

this creates the spread of z values by the relation:
j = z(@ x=n) - z(@ x=n-1)
k = j + 180
l = k + z(@ x = n)

y の整数解の条件をテストするために、z < x の値をスキャン (スキップ) する必要があります。

これは可能だと思いますか?

4

2 に答える 2

2

あなたの最善のアプローチは、与えられた方程式を再帰関係として作り直してから、再帰関数を定義して計算したい値を決定するか、関係の閉じた形式の解を見つけることです。再帰関係の詳細については、次を参照してください。

最後に、私の経験では、このような問題には、MatLab、Octave、Mathematica などの数学的数値解析ソフトウェアを使用するのが最適です。少なくとも、これらを使用することで、迅速な展開とテストを可能にするプラットフォームを手に入れることができます。

于 2012-02-12T05:23:11.560 に答える
1

私が行ったのは、疑似コードを Python に変換したことだけです。多分それはいくつかの助けになるかもしれません。Python チュートリアルをまだご覧になっていない場合は、こちらをご覧になることをお勧めします。

# python 2.7

# raw_input returns string - convert to int
upper_bound = int(raw_input('Upper bound: '))

def z(x):
    'A function to calculate z from x.'
    # c and d are constants
    c = 5
    d = 2
    # integer division here
    return (c + 90*x)*(d + 90*x)/90

# the value of z_0
z0 = z_x = z(0)
# a list to hold the z values z_0, z_1, ...
# the list includes z_0 (when x = 0)
zs = [z0]

x = 1
while z_x < upper_bound:
    z_x = z(x)
    zs.append(z_x)

    j = zs[x] - zs[x - 1]
    k = j + 180
    l = zs[x] + k
    print j, k, l

    x += 1
于 2012-02-12T18:34:23.737 に答える