質問

いる方法があるかどうかを判断し解決方程式など:3n1+4n2+5n3=456, では、 n1、n2、n3 が正の整数です。

以上の一般はありま ゼロまたは正 整数 n1、n2、n3...この方程式 k1n1+k2n2+k3n3...=m 場所 k1k2k3...や m 知られた正の整数です。

いるのに必要な溶液での決定により解決が得られない場合には存在します。

編集:

に関する実践的なこのアルゴリズム

コミュニケーショ図書館、いかどうかを判断するために一定のメッセージの有効性の大小に応じて、取扱いをすることができます。例えば:そんなメッセージを含むゼロ以上の3-バイトは要素のゼロ以上の4バイトは要素のゼロ以上5-バイトです。メッセージをいただきましたが456バイトをして大事にしていきたいと思いるが、その有効性の前にさらに検査することを決定しました。もちろん、ヘッダのメッセージを含む要素の数の各タイプがしたいのですが、最初の検査での通信-図書館レベルで通過のようなもの pair<MsgType,vector<3,4,5>>.

役に立ちましたか?

解決

まいの場合は正規表現

(xxx|xxxx|xxxxx)*

試合xx...xが456ます。

この溶液をO(n+a^2)が最も小さな番号の左側(この場合3).

Dir数6,7,15.私に電話番号が表現できる形で6倍+7y+15z"あり".いますのでチェックが与えられます。

いうことができ数nるはずだくことができますn+6,n+12,n+18-一般に、n+6kすべてのk>=0になります。にできない場合が数n、n-6により確実なものの場合を取得しました(n=6)、(n=6)+6=nという)は、n-12、18、n-6kないもです。

いと判15は可能ですが、9ざいません。当社の場合, 15=6*0+7*0+15*1 がないことができる9動します。に用いられるようになって以前の論理から15+6kは全てk>=0 9-6kすべてのk>=0。また一部の番号が割り6を3として残り(3, 9, 15, 21, ...) ることができ答え:番号 <=9行されていない番号>=15ます。

あるすべてのremaindersの部門による6(0,1,2,3,4,5であるが一般的であり、これらの最小数も可能です。(ただけることを示してこの数字の残り3 15)となります。

どのような:グラフ作成頂点とする0,1,2,3,4,5.すべての番号kですが与えられる7,15を無視6)追加端からx(x+k)mod6.で重量(x+k)div6.使用 Dijkstraのアルゴリズム を0として最初のノードです。の距離により明らかとなったアルゴリズムのちょうどその数値を検索します。

我々の場合(6,7,15)の7が0->1(重量1),1->2(重量1),2->3(重量1), ..., 5 -> 0 (重量1号15を0->3(2),1->4(重量2), ..., 5 -> 1 (重量2).最短経路を0から3つのエッジ重量は2となっています。なので6*2 + 3 =15の最小数を与える3としております。6*1 + 3 =9の問い合わせ、確認しましたが以前ようとする運動です。

との接続を正規表現?でも、正規表現には相当の有限オートマトンとをもとに構築した。

この問題を、複数のクエリを許に登場 ポーランドオリンピック I翻訳ソリューションとなります。さあ、聞いて、今の人とコンピュータ科学科には有用ではないリアルプログラマー、パンチ氏。

他のヒント

によると これ, 、{n1、n2、n3、...}の最大の共通因子がmの除数ではない場合、解決策はありません。このページは、{n1、n2}の例を示していますが、より大きなシステムに拡張されます。新しい問題は、最大の共通要因を見つけるためのアルゴリズムを作成することですが、それは元の問題に照らして些細なことです。

したがって、アルゴリズムの一部は、GCF({n1、n2、...})を見つけてから、それがmの係数であるかどうかを確認します。そうでない場合、解決策は存在しません。これは、ソリューションが存在することを完全には示していませんが、何も存在しないことをすぐに示すことができますが、これはまだ役立ちます。

整数の制約を伴う不平等のシステムについて話しているようです。現実は、あなたがこのシステムを解決していることです:

k1n1+k2n2+k3n3...=m
n1 >= 0
n2 >= 0
n3 >= 0

N1、N2、N3が整数であるという追加の制約。それはです 線形計画 問題。残念ながら、そのようなシステムを解決する一般的なケース 整数の制約はNP不完全です. 。ただし、あなたのためにそれを解決する多くのアルゴリズムがあります。

これはに関連しています Frobenius Coinの問題, 、n> 3で解決されていません。

ブルートフォースアプローチ(pseudocode):

def a = 3
def b = 4
def c = 5
def x = 456

for n1 = a to int(x / a) + 1 step a
  for n2 =b to int(x / b) + 1 step b
    for n3 = c to int(x / c) + 1 step c
      if a * n1 + b * n2 + c * n3 = x then
        print n1, n2, n3

参照してください http://mail.python.org/pipermail/python-list/2000-april/031714.html

編集: 通信ライブラリでは、すぐに機能する必要があるため、これは意味がありません。 OPのアプリケーションでは、おそらくある種のハッシュを使用するでしょうが、彼のアプローチは興味深いように聞こえます。

これが2つの数字のケースの何かです。私はまだそれをスケーリングする方法を理解していません:

2つの比較的プライム整数xとyを考えると、正の整数aとbが存在するため、 ax+by=c すべてのために c>=(x-1)(y-1)

基本的に、これはあなたが想定しているなら、これはうまくいくからです x<y, 、(0、y、2y、3y、...、(x-1)y)ですべての整数mod xを表現できます。これで、Xの正の倍数を追加することにより、(x-1)(y-の間のすべての整数があるように、[(x-1)(y-1)、(x-1)y]の間のすべての整数に到達できます。 1)および(x-1)y-1は以前に発現されていました。

  1. GCD(X、Y)。 Cが複数の場合は、falseを返します。
  2. gcd(x、y)> 1、gcdでx、y、cを分割する場合
  3. c>(x-1)(y-1)の場合、trueを返します
  4. それ以外の場合はブルートフォース

そしてブルートフォースのために:

if int(c/y) >= c*y^(-1) mod x, return true, 
else return false

おそらく、次の情報は一般的な状況を処理しないので、それは無関係ですが、...

問題が、与えられた正の整数kを合計として形成できるかどうかを判断することである場合 3*n1 + 4*n2 + 5*n3, 、非陰性整数N1、N2、N3の場合、答えはk> = 3の場合は「はい」です。

ローゼンの有名な教科書 離散数学とそのアプリケーション, 、p。第6版の287は、「誘導を使用して、「4セントスタンプと5セントスタンプを使用して12セント以上の郵便料金をすべて形成できる」ことを証明しています。

基本的なステップは、12セントの郵便料金を3つの4セントスタンプで形成できることです。

誘導ステップは、P(k)が4セントスタンプを使用して真である場合、4セントスタンプを5セントスタンプで置き換えて、P(K+1)が真であることを示すことを単に考慮します。 P(k)が4セントスタンプを使用しない場合、k> = 12を使用して真である場合、合計を形成するには少なくとも3つの5セントスタンプが必要であり、3つの5セントスタンプを4セント4セントに置き換えることができます。 K+1を達成するためのスタンプ。

この問題のために上記のソリューションを拡張するには、さらにいくつかのケースを考慮する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top