Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Алгоритмы > Подбор коэффициентов для уравнения |
Автор: Деран 23.7.2008, 20:51 |
Здравствуйте! Не могли бы подсказать алгоритм, если конечно такой есть! например, есть целое число X. Число подставляется к уравнению: 2*A + B*C = X Нужно подобрать все возможные целые числа A, B, C, что бы при подстановке в уравнение было равно X. Или выход только перебором и смотреть равно ли оно X. Хотя бы намеки, что искать! Заранее, спасибо! |
Автор: Predictor 23.7.2008, 21:11 |
1.Целые отрицательные рассматриваем? 2.Каков порядок чилса X? Или интересует решение в общем случае? |
Автор: Деран 23.7.2008, 22:08 | ||
1. Да. 2. Решение в общем случае. |
Автор: Predictor 23.7.2008, 23:01 |
Отрицательтельные числа откидываем сразу, иначе вариантов решения бесконечное множество.Остатются натуральые числа и ноль.Для нуля все понятно. Далее делаем так.[...] - означает целую часть 1.Берем последовательность A={0...[X/2]} 2.Для каждого Ai составляемс выражение X-2Ai и обозначаем его Yi 3.Для каждого Ai сразу записываем в ответ две тройки {Ai;B=1;C=Yi} и {Ai;B=Yi;C=1} 4.Далее составляем ряд B={0...[Yi/2]} 5.Для каждого Bi проверяем: если Ci=Yi/Bi - целое, то в ответ записываем еще и эту тройку {Ai;Bi;Ci} Есть ощущение, что шаги 4-5 можно сократить.Например, мне кажется, что ряд B={0...[Yi/2]} можно скоратить в два раза, но это нужно еще доказать. А в общем как-то так... |
Автор: Akina 23.7.2008, 23:50 | ||
В и С симметричны, так что B={0...SQRT(Yi)}, и если B<SQRT(Yi), то генерится сразу 2 тройки. |
Автор: Predictor 24.7.2008, 00:03 |
Вот только SQRT здесь по-моему все-таки лишний...рассматривая ряд делителей Yi дойдем до значения [Yi/2].Дальше симметрично. Но мне кажется, что сам ряд {0...[Yi/2]]}можно еще сократить до точки [(0.5*Yi-1)/2]+1.Но вот только что-то в доказательстве этого я запутался. Все таки мне кажется,что с корнем лучше не связываться.Таким перебором для целых чисел мне кажется эффективнее работать. |
Автор: Akina 24.7.2008, 08:11 | ||
Что за бред? Если Yi=1000, по-твоему, надо топать до 500? на самом деле до 31 вполне достаточно. |
Автор: Predictor 24.7.2008, 09:37 |
Прости, что-то я все равно не могу уловить идеи с корнем ![]() |
Автор: Деран 24.7.2008, 10:16 |
А если X будет принимать, только такие числа: 0 1 4 9 16 25 36 49 64 ... Возможно решение? |
Автор: Akina 24.7.2008, 10:25 |
Ну вот что за [censored] привычка дать кусочек постановки задачи? Где остальное? "догадайся мол сама"? Формулируй задачу ПОЛНОСТЬЮ, причем в ОДНОМ постинге. |
Автор: Деран 24.7.2008, 11:32 | ||
Извините, поторопился я только сам недавно узнал что должны получаться такие числа Попробую еще раз описать задачу: Переменная X принимает числа {0, 1, 4, 9, 16, 25, 36, 49, 64, ...} X - результат уравнения, например B*B + 4*A*C т. е. известно только X, а значения A, B и C нужно найти, значений может быть множество. |
Автор: Akina 24.7.2008, 14:09 |
Опять кусок? тебе же уже задавали наводящие вопросы - хотя бы о нулевых и отрицательных значениях... А если это всё, и больше НИКАКИХ условий и ограничений нет - решений бесконечное множество, и дальше обсуждать нечего. |
Автор: Деран 27.7.2008, 13:33 |
Akina, ![]() Наверное остается только подбирать перебором! Ну ладно спасибо за помощь! |
Автор: ksili 28.7.2008, 05:16 | ||||
да при таких условиях
даже если все перменные неотрицательные значения будут принимать, то решений - бесконечно много. |
Автор: Firexel 28.7.2008, 08:38 |
тут есть хоть какой-то смысл, только если А, В, С - целые (в лучшем случае - натуральные). тогда подстановкой по 3м измерениям получаем конечное количество результатов |
Автор: ksili 28.7.2008, 10:23 | ||
да даже если целые, будет бесконечное множество вот таких решений: B = SQRT(X) A = 0 C - любое или B = SQRT(X) A - любое C = 0 |
Автор: Predictor 28.7.2008, 13:41 |
Ну с нулями-то совсем не интересно ![]() |