φ函数的值 通式:φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn),其中p1, p2……pn为x的所有质因数,x是不为0的整数。φ(1)=1(唯一和1互质的数就是1本身)。 (注意:每种质因数只一个。比如12=2*2*3

那么φ(12)=12*(1-1/2)*(1-1/3)=4)

  若n是质数p的k次幂,φ(n)=p^k-p^(k-1)=(p-1)p^(k-1),因为除了p的倍数外,其他数都跟n互质。

  设n为正整数,以 φ(n)表示不超过n且与n互

  素的正整数的个数,称为n的欧拉函数值,这里函数

  φ:N→N,n→φ(n)称为欧拉函数。

  欧拉函数是积性函数——若m,n互质,φ(mn)=φ(m)φ(n)。

  特殊性质:当n为奇数时,φ(2n)=φ(n), 证明与上述类似。

这道题就是赤裸裸的欧拉函数,直接套公式即可

program poj2407;
const
  max=31623;
var
  a:array[1..max] of longint;
  n,len:longint;
  ans:real;
function check(num:longint):boolean;
var
  i,j:longint;
begin
  for i:=1 to len do
    if a[i]<=trunc(sqrt(num))+1 then
    begin
      if num mod a[i]=0 then
      begin
        check:=false;
        exit;
      end;
    end;
  check:=true;
end;
procedure first;
var
  k:longint;
begin
  a[1]:=2;
  len:=1;
  for k:=3 to max do
    if check(k) then
    begin
      inc(len);
      a[len]:=k;
    end;
end;
function f(num:longint):real;
var
  i:longint;
  sum:real;
begin
  sum:=n;
  for i:=1 to len do
    if (a[i]<=trunc(sqrt(num))+1) and (num>1) then
    begin
      if num mod a[i]=0 then
      begin
        while (num mod a[i]=0) and (num>1) do num:=num div a[i];
        sum:=sum*(1-1/a[i]);
      end;
    end
    else break;
  if num>1 then sum:=sum*(1-1/num);
  f:=sum;
end;
begin
  first;
  readln(n);
  while n<>0 do
  begin
    ans:=f(n);
    writeln(ans:0:0);
    readln(n);
  end;
end.