1 条题解

  • 0
    @ 2023-1-14 11:26:05

    本题有一个欧拉公式可以算以x为分母的既约分数的个数,如下:

    function euler(x:longint):int64;
    var
      o:longint;
      sum,t:int64;
    begin
      sum:=1;
      o:=2;
      while o*o<=x do
      begin
        if x mod o=0 then
        begin
          t:=1;
          while x mod o=0 do
          begin
            x:=x div o;
            t:=t*o;
          end;
          sum:=sum*(t-t div o);
        end;
        if odd(o)
          then inc(o,2)
          else inc(o);
      end;
      if x>1 then sum:=sum*(x-1);
      exit(sum);
    end;
    

    这样,读入 xxyy 后,只需将 ii2y12\cdots y-1eular(i)eular(i) 加起来,然后又将 ii1x11\cdots x-1 for 一次,只要 iy\frac{i}{y} 是既约分数,就将总值在加一。以此就算出了答案。

    begin
      sum:=0;
      for i:=2 to y-1 do
       sum :=sum+ euler(i);
      for i:=1 to x do
      if gcd(i,y)=1
        then inc(sum);
      writeln(sum);
    end.
    
    • 1

    信息

    ID
    27
    时间
    1000ms
    内存
    128MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者