3927. 【NOIP2014模拟11.6】可见点数 (Standard IO)

来源:互联网 发布:linux ntp 开机启动 编辑:程序博客网 时间:2024/05/17 22:59

Description

ZPS经过长期的努力争取,终于成为了0901班的领操员,他要带领0901班参加广播操比赛。现在0901班的队伍可以看作是一个n*n的点阵,每个人都站在格点上。现在作为领操员的ZPS站(0,0)点,他想知道如果0901班的队伍站齐了,他能看到多少个人的脸(假设每个人的身高相同,体积相同)。

Input

一个正整数n。

Output

ZPS能看到多少个人的脸(当然他是看不到自己的脸的)。

Sample Input

3

Sample Output

5

Data Constraint

40%的数据,n<=1500。100%的数据,n<=100000。

思路

设k = y / x,则原问题等价于求多少对(x,y),x与y互质,那么ans=Σ(i=1,n-1)φ(i)利用欧拉函数的积性:(1)当i是质数是,φ(i)=i+1。(2)nm互质是,φ(nm)=φ(n)*φ(m)
var  s:array[1..1000000] of longint;  f:array[1..1000000] of boolean;  i,j,n:longint;  ans:int64;begin  readln(n);  if n=1 then    begin      writeln(0);      exit;    end;  fillchar(f,sizeof(f),true);  f[1]:=false;  for i:=1 to n-1 do    s[i]:=i;  for i:=2 to n-1 do    if f[i] then      begin        j:=0;        repeat          j:=j+i;          s[j]:=s[j] div i*(i-1);          f[j]:=false;        until j+i>n-1      end;  for i:=1 to n-1 do    ans:=ans+s[i];  writeln(ans*2+1);end.
阅读全文
0 0
原创粉丝点击