3つのlong int変数a、b、cを入力できるコードを記述しようとしています。 コードはax + by = cとなるようにすべての整数(x、y)を見つけるべきですが、入力値は2 * 10^9までです。私はこれを効率的に行う方法がわかりません。私のアルゴリズムはO(n^2)です。このような大きな入力に対しては本当に悪いです。どうすればいいですか?ここに私のコード - だO(n^2)時間の複雑さよりも良い点で、行ax + by = cにある整数のすべての順序付きペアを見つける
typedef long int lint;
struct point
{
lint x, y;
};
int main()
{
lint a, b, c;
vector <point> points;
cin >> c >> a >> b;
for(lint x = 0; x < c; x++)
for(lint y = 0; y < c; y++)
{
point candidate;
if(a*x + b*y == c)
{
candidate.x = x;
candidate.y = y;
points.push_back(candidate);
break;
}
}
}
'x'と' y'は負ではありませんか? –
このデファンチン方程式を解くには、(私が知る限り)最速のアルゴリズムである[拡張ユークリッドアルゴリズム](https://en.wikipedia.org/wiki/Extended_Euclidean_algorithm)をチェックする必要があります。 –
あなたのコードは 'c'が正であると仮定し、' x'と 'y'の負でない値だけをチェックします。同じ制約の下で、内側のループを排除し、ANY値があるかどうかを検出するのは簡単です。次に、他のものを見つけるために1つの値があれば、より単純なループになります。これらの制約がなければ、潜在的なペアの数は無限になります。 – Peter