Название: Функция нормирования значение Отправлено: Racheengel от Март 15, 2016, 15:59 Всем Привет,
может быть я туплю и не вижу очевидного... но нужна функция, которая бы нормировала заданное значение относительно какого-либо диапазона так, чтобы длина диапазона, поделенная на нормированное значение, была целым числом. Например: диапазон имеет размер L = 864 единицы, базовое значение задано V = 20. Найти максимально близкое к 20 значение X, чтобы 864 делилось на него без остатка. Т.е. (L % X == 0) && (abs(X - V) -> 0) В примере X будет удовлетворять значение 16 или 24, т.к. 864 / 24 и 864 / 16 не дают остатка. Ручками то я накидал алгоритм. Но может быть есть что стандартное? Название: Re: Функция нормирования значение Отправлено: kambala от Март 15, 2016, 16:57 if L % V then X = V + (L - int(L/V)*V)
else X = L / V :) Название: Re: Функция нормирования значение Отправлено: Fat-Zer от Март 15, 2016, 17:12 в stl'е такого точно нет...
а свой алгоритм, ради интереса, какой? перебор? разложение на множители и потом какой-то хитрый перебор по ним? if L % V then X = V + (L - int(L/V)*V) L=10; V=3 уже не то...else X = L / V и второе должно быть X=V Название: Re: Функция нормирования значение Отправлено: kambala от Март 15, 2016, 17:46 да, точно. значит Х = V ± (L - int(L/V)*V) и смотреть на кого из них поделится без остатка
Название: Re: Функция нормирования значение Отправлено: Fat-Zer от Март 15, 2016, 18:36 да, точно. значит Х = V ± (L - int(L/V)*V) и смотреть на кого из них поделится без остатка L=11; V=5;целочисленная арифметика не так проста... думаю, что сложность в общем случае тут не меньше, чем O(sqrt(L)). Название: Re: Функция нормирования значение Отправлено: Racheengel от Март 15, 2016, 18:49 Свой алгоритм - тупо подбор в обе стороны по очереди.
Заодно проверяет макс и мин границы допустимого значения. Я не математик, так что могу только так :) Название: Re: Функция нормирования значение Отправлено: kambala от Март 15, 2016, 19:42 да, точно. значит Х = V ± (L - int(L/V)*V) и смотреть на кого из них поделится без остатка L=11; V=5;Название: Re: Функция нормирования значение Отправлено: deMax от Май 24, 2017, 15:03 Можно перебирать в обе стороны, а можно разложить V на простые числа и перебрать все варианты с простыми числами(например для 5ти простых чисел, берем первое число, берем второе число, 1е и 2е, 3е... 1е 2е 3е 4е 5е.
при переборе хранить минимальную разницу и набор. Хотя данный способ будет возможно медленнее. |