Разложить число на простые числа
Например 20 = 2^2 + 5^1
Желательно с оптимизацией, чтоб для 6-значных чисел не считалось пол часа
Программу можно писать на любом языке из C-подобных, Ruby, Pascal, VB и тп
Аноним:
Какой предел для максимального значения числа, предназначенного для факторизации?
Ответ нет, будем считать, что длина чисел типа четырехбайтного целого.
чем дольше тем лучше, в идеале нужно чтоб вместилось 43! = 60415263063373835637355132068513997507264512000000000
Такой идеал в школьном сервисе искать бесполезно: на него не рассчитаны типы данных, которые используются в базовых языках программирования.
на руби у меня вполне получается, остальные не знаю
Ответы
Ответ дал:
0
var
i,k,n,p:longint;
f:array[1..10,1..2] of longint;
begin
p:=2; i:=1;
f[1,1]:=1; f[1,2]:=1;
Write('Введите натуральное число не больше 2 147 483 647: ');
Read(n);
Write(n,' = 1');
while n<>1 do begin
if (n mod p)=0 then begin
if f[i,1]<>p then
begin Inc(i); f[i,1]:=p; f[i,2]:=1 end
else Inc(f[i,2]);
n:=n div p
end
else inc(p)
end;
k:=i;
for i:=2 to k do
begin
Write(' x ',f[i,1]);
if f[i,2]>1 then Write('^',f[i,2])
end;
Writeln
end.
Тестовое решение:
Введите натуральное число не больше 2 147 483 647: 223092870
223092870 = 1 x 2 x 3 x 5 x 7 x 11 x 13 x 17 x 19 x 23
Введите натуральное число не больше 2 147 483 647: 65536
65536 = 1 x 2^16
Введите натуральное число не больше 2 147 483 647: 2147483647
2147483647 = 1 x 2147483647
i,k,n,p:longint;
f:array[1..10,1..2] of longint;
begin
p:=2; i:=1;
f[1,1]:=1; f[1,2]:=1;
Write('Введите натуральное число не больше 2 147 483 647: ');
Read(n);
Write(n,' = 1');
while n<>1 do begin
if (n mod p)=0 then begin
if f[i,1]<>p then
begin Inc(i); f[i,1]:=p; f[i,2]:=1 end
else Inc(f[i,2]);
n:=n div p
end
else inc(p)
end;
k:=i;
for i:=2 to k do
begin
Write(' x ',f[i,1]);
if f[i,2]>1 then Write('^',f[i,2])
end;
Writeln
end.
Тестовое решение:
Введите натуральное число не больше 2 147 483 647: 223092870
223092870 = 1 x 2 x 3 x 5 x 7 x 11 x 13 x 17 x 19 x 23
Введите натуральное число не больше 2 147 483 647: 65536
65536 = 1 x 2^16
Введите натуральное число не больше 2 147 483 647: 2147483647
2147483647 = 1 x 2147483647
Если справились, зачем публиковать? Такой странный способ развлекаться?
типа того. баллы то есть а делать с ними нечего
потом всегда кто-то может предложить решение получше
Надо будет обсудить эти развлечения с Администрацией сайта. Нужны ли тут такие пользователи, которые отвлекают людей он основного - решения школьных заданий, ради своих забав?
не верю в альтруистичность данного сайта. Те кто не тратят баллы отвечают на интерес. Те же кто тратят не против получить такой куш. Так что ничего плохого я не делаю
Достаточно, я Вас понял. И сделал выводы.
Вы же сами говорили что помогаете некоторым ученикам, учите их по скайпу или как-то так. Т.е. сайт не обеспечивает возможностей должным образом научить человека. Он просто дает возможность кому-то решить за кого-то, а это медвежья услуга. Но найти человека который хочет учиться и нужна помощь - да возможно, единственная хорошая черта
Ре
редко кто выкладывает код сделанной им програмы и задание и говорит что не может понять в чем ошибка хотя уже долго бьется над решением.
обычно все так - я нефига в этом не шарю, сделайте за меня плиз, а то не хочу этим замарачиваться
Вас заинтересует
2 года назад
2 года назад
2 года назад
2 года назад
7 лет назад
9 лет назад
9 лет назад