Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Подбор коэффициентов для уравнения


Автор: Деран 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
Цитата(Predictor @ 23.7.2008,  21:11)
1.Целые отрицательные рассматриваем?
2.Каков порядок чилса X? Или интересует решение в общем случае?

1. Да.
2. Решение в общем случае.

Автор: Akina 23.7.2008, 22:43
Цитата(Деран @  23.7.2008,  21:51 Найти цитируемый пост)
Нужно подобрать все возможные целые числа A, B, C, что бы при подстановке в уравнение было равно X.

Очевидно, что количество троек удовлетворяющих условию чисел бесконечно вне зависимости от значения Х.
Исходный вопрос лишен смысла.

Автор: 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
Цитата(Predictor @  24.7.2008,  00:01 Найти цитируемый пост)
мне кажется, что ряд B={0...[Yi/2]} можно скоратить в два раза, но это нужно еще доказать.

В и С симметричны, так что 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
Цитата(Predictor @  24.7.2008,  01:03 Найти цитируемый пост)
Вот только SQRT здесь по-моему все-таки лишний...рассматривая ряд делителей Yi дойдем до значения [Yi/2].Дальше симметрично. 

Что за бред? Если Yi=1000, по-твоему, надо топать до 500? на самом деле до 31 вполне достаточно.

Автор: Predictor 24.7.2008, 09:37
Прости, что-то я все равно не могу уловить идеи с корнем smile 

Автор: Деран 24.7.2008, 10:16
А если X будет принимать, только такие числа: 0 1 4 9 16 25 36 49 64 ...
Возможно решение?

Автор: Akina 24.7.2008, 10:25
Цитата(Деран @  24.7.2008,  11:16 Найти цитируемый пост)
А если 

Ну вот что за [censored] привычка дать кусочек постановки задачи? Где остальное? "догадайся мол сама"? Формулируй задачу ПОЛНОСТЬЮ, причем в ОДНОМ постинге.
 

Автор: Деран 24.7.2008, 11:32
Цитата(Akina @ 24.7.2008,  10:25)
Цитата(Деран @  24.7.2008,  11:16 Найти цитируемый пост)
А если 

Ну вот что за [censored] привычка дать кусочек постановки задачи? Где остальное? "догадайся мол сама"? Формулируй задачу ПОЛНОСТЬЮ, причем в ОДНОМ постинге.

Извините, поторопился я только сам недавно узнал что должны получаться такие числа
Попробую еще раз описать задачу:

Переменная X принимает числа {0, 1, 4, 9, 16, 25, 36, 49, 64, ...}
X - результат уравнения, например B*B + 4*A*C
т. е. известно только X, а значения AB и C нужно найти, значений может быть множество.

Автор: Akina 24.7.2008, 14:09
Опять кусок? тебе же уже задавали наводящие вопросы - хотя бы о нулевых и отрицательных значениях...
А если это всё, и больше НИКАКИХ условий и ограничений нет - решений бесконечное множество, и дальше обсуждать нечего.

Автор: Деран 27.7.2008, 13:33
Akina,  smile простите еще раз!
Наверное остается только подбирать перебором!
Ну ладно спасибо за помощь!

Автор: ksili 28.7.2008, 05:16
Цитата(Akina @  24.7.2008,  18:09 Найти цитируемый пост)
хотя бы о нулевых и отрицательных значениях... А если это всё, и больше НИКАКИХ условий и ограничений нет - решений бесконечное множество

да при таких условиях
Цитата(Деран @  24.7.2008,  15:32 Найти цитируемый пост)
Переменная X принимает числа {0, 1, 4, 9, 16, 25, 36, 49, 64, ...}X - результат уравнения, например B*B + 4*A*C

даже если все перменные неотрицательные значения будут принимать, то решений - бесконечно много. 

Автор: Firexel 28.7.2008, 08:38
тут есть хоть какой-то смысл, только если А, В, С - целые (в лучшем случае - натуральные). тогда подстановкой по 3м измерениям получаем конечное количество результатов

Автор: ksili 28.7.2008, 10:23
Цитата(Firexel @  28.7.2008,  12:38 Найти цитируемый пост)
тут есть хоть какой-то смысл, только если А, В, С - целые (в лучшем случае - натуральные). тогда подстановкой по 3м измерениям получаем конечное количество результатов

да даже если целые, будет бесконечное множество вот таких решений:
B = SQRT(X)
A = 0
C - любое

или


B = SQRT(X)
A - любое
C = 0

Автор: Predictor 28.7.2008, 13:41
Ну с нулями-то совсем не интересно smile Так что их можно сразу выкинуть ;)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)