1 条题解
-
0
本题有一个欧拉公式可以算以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;
这样,读入 和 后,只需将 从 将 加起来,然后又将 从 for 一次,只要 是既约分数,就将总值在加一。以此就算出了答案。
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
- 上传者