Здравствуйте, programmer_kia, Вы писали:
PK>может кто подскажет, как посчитать 200!(факториал) за количество шагов не >20???? PK>если за шаг считать одно умножение!!!
Использовать сложение
А что за задача такая странная?
Здравствуйте, programmer_kia, Вы писали:
PK>может кто подскажет, как посчитать 200!(факториал) за количество шагов не >20???? PK>если за шаг считать одно умножение!!!
Здравствуйте, programmer_kia, Вы писали:
PK>может кто подскажет, как посчитать 200!(факториал) за количество шагов не >20???? PK>если за шаг считать одно умножение!!!
Здравствуйте, programmer_kia, Вы писали:
PK>может кто подскажет, как посчитать 200!(факториал) за количество шагов не >20???? PK>если за шаг считать одно умножение!!!
Предварительно создать таблицу факториалов (скажем до 1000). А потом ЗА ОДИН ШАГ найти 200!
Здравствуйте, programmer_kia, Вы писали:
PK>может кто подскажет, как посчитать 200!(факториал) за количество шагов не >20???? PK>если за шаг считать одно умножение!!!
Невозможно, по той причине, что на отрезке [1, 200] больше 20 простых чисел (и каждое из них присутствует в разложении числа 200! хотя бы в степени 1).
Здравствуйте, programmer_kia, Вы писали:
PK>может кто подскажет, как посчитать 200!(факториал) за количество шагов не >20???? PK>если за шаг считать одно умножение!!!
Разложение факториала числа в такой вид можно сделать по следующему скрипту (для MatLab):
N = 200;
p = primes(N); % находим все простые числа до N
s = zeros(1,length(p));
for i=2:N,
primes_factor = factor(i); % раскладываем на простые множители
for j=1:length(primes_factor),
indx = find(p==primes_factor(j));
s(indx) = s(indx) + 1;
end
end
% выводим результат
fprintf(['%d! = '],N);
for i=1:length(p),
if s(i)~=0,
if i~=1,
fprintf([' * ']);
end
if s(i)>1,
fprintf([' %d^%d'],p(i),s(i));
else
fprintf([' %d'],p(i));
end
end
end
Здравствуйте, programmer_kia, Вы писали:
PK>может кто подскажет, как посчитать 200!(факториал) за количество шагов не >20???? PK>если за шаг считать одно умножение!!!
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, programmer_kia, Вы писали:
PK>>может кто подскажет, как посчитать 200!(факториал) за количество шагов не >20???? PK>>если за шаг считать одно умножение!!!
К>Невозможно, по той причине, что на отрезке [1, 200] больше 20 простых чисел (и каждое из них присутствует в разложении числа 200! хотя бы в степени 1).
ИМХО, условие задачи сформулировано несколько расплывчато.
если условие задачи уточнить — не использовать изначально числа > 200, то
200! = X ^ N + Y
с учётом того, что 200! ~= 10^375
200! ~= 200^162
X = 200
N = 162, и 200^162 вычисляется за 7 умножений (и 2 сложения)
Оставшиеся 12 умножений с лихвой хватит на вычисление остатка Y = 200! — 200^162