Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Pascal] непростая задачка с факториалам


Автор: Zuzas 10.5.2007, 10:18
есть такая задачка, Напишите функцию, которой значение былаб равно начальным множителям, састовлиающие факториал данного числа, числа. Например:
f(1)=0;
f(2)=1, nes 2!=2;
f(5)=5, nes 5!=120=2*2*2*3*5;
f(20)=36

Никак немагу врубится в неё. Помогите

Автор: Rodman 10.5.2007, 10:51
Код

Const
  n=6;
var
  s:real;
  i:integer;
function fact(x:integer):integer;
begin
  if x>1 then 
  begin
     writeln(x, ' ');
      x:=x*fact(x-1);
  end;
  fact := x;
end;
begin
  s := 1 shl n;
  for i:=1 to n do
    s:=s+fact(i)-(1 shl i);
  writeln('S=',S:5:4);
end.


это что ли?

Автор: Silent 10.5.2007, 11:47
Держи свою могучую функцию:
Код

Function F(x:integer):integer;
  var i,res:integer;
  Function count(x:integer):integer;
    var i,res:integer;
    begin
      i:=2;
      res:=0;
      while x mod 2 = 0 do begin
        inc(res);
        x:=x div 2;
      end;
      i:=3;
      while x>=i do begin
        if x mod i = 0 then begin
          inc(res);
          x:=x div i;
          dec(i,2);
        end;
        inc(i,2);
      end;
      count:=res;
    end;
  begin
    res:=0;
    for i:=2 to x do
      inc(res,count(i));
    f:=res;
  end;

Автор: Zuzas 10.5.2007, 12:01
Silent спс за функцию как раз то что мне и надо было
и может кто нибудь знает как разбить число на простые числа например:
120=2*2*2*3*5;

Автор: Silent 10.5.2007, 12:32
Разбить число n на простые множители легко - нужно просто перебрать все числа, меньшие корня квадратного из n:
Код

Procedure Divisor(x:integer);
  var i:integer;
  begin
    write(x,'=');
    while (x mod 2=0) do begin
      x:=x div 2;
      if x<>1 then write('2*') else write('2');
    end;
    i:=3;
    while i<=x do begin
      if x mod i=0 then begin
        x:=x div i;
        if x<>1 then write(i,'*') else write(i);
        dec(i,2);
      end;
      inc(i,2);
    end;
  end;

Процедуре даешь число (например 120), она выводит результат (120=2*2*2*3*5).
Но я так предполагаю, что тебе она не подойдет - ты ведь хочешь вывести все подсчитанные функцией F делители факториала?

Автор: Zuzas 10.5.2007, 20:29
Балсое способа, всё работает

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