http://acm.pku.edu.cn/JudgeOnline/problem?id=1091

Код:
program PKU1091;
type integer = longint;

var n, m, i, j: integer;
    s, k: comp;

begin
  readln(n, m);
  s := 1; i := 2;
  while m > 1 do begin
    if m mod i = 0 then begin
      k := 1;
      for j := 1 to n do k := k * i;
      s := s * (k - 1);
      m := m div i;
      while m mod i = 0 do begin
        s := s * k;
        m := m div i;
      end;
    end;
    i := i + 1;
    if 1.0 * i * i > m then i := m;
  end;
  writeln(s:1:0);
end.