首页 > 代码库 > SDOI2008仪仗队

SDOI2008仪仗队

这题应该注意到与b2818的不同

一个点能被看见当且仅当它与(1,1)的横纵坐标的距离gcd为1

所以问题转化为x,y<=n-1,求gcd(x,y)=1的方案数

最后要加上2

代码:

 1 var i,n,tot:longint; 2     ans:int64; 3     phi:array[0..50000] of int64; 4     p:array[0..50000] of longint; 5 procedure get; 6  var i,j:longint; 7    begin 8      fillchar(phi,sizeof(phi),0); 9      tot:=0;10      phi[1]:=0;11      for i:=2 to n do12       if phi[i]=0 then13        begin14          phi[i]:=i-1;inc(tot);p[tot]:=i;15          j:=i+i;16          while j<=n do17            begin18              if phi[j]=0 then phi[j]:=j;19              phi[j]:=(phi[j] div i)*(i-1);20              inc(j,i);21            end;22        end;23    end;24 procedure main;25  begin26    readln(n);dec(n);27    get;28    for i:=2 to n do inc(phi[i],phi[i-1]);29    writeln(2*phi[n]+3);30  end;31 begin32   main;33 end.34               
View Code