• bzoj2190[SDOI2008]仪仗队(欧拉函数)


    Description

      作为体育委员,C君负责这次运动会仪仗队的训练。仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图)。   

        

    现在,C君希望你告诉他队伍整齐时能看到的学生人数。

    Input

      共一个数N。

    Output

      共一个数,即C君应看到的学生人数。

    Sample Input

      4

    Sample Output

      9


    HINT

    【数据规模和约定】   对于 100% 的数据,1 ≤ N ≤ 40000

    观察发现,若x>0且y>0,当且仅当gcd(x,y)=1时能看到点(x,y),用欧拉函数搞一搞,可以发现x>0且y>0是能看到的数量是2*[f(1)+f(2)+...+f(n)]-1(设欧拉函数是f,因为(1,1)算了两次,所以要减1),最后再加上(0,1)和(1,0)两个点,所以ans=2*[f(1)+f(2)+...+f(n)]-1。

     1 program rrr(input,output);
     2 var
     3   a:array[0..40040]of boolean;
     4   f:array[0..40040]of longint;
     5   i,j,n,ans:longint;
     6 begin
     7    assign(input,'r.in');assign(output,'r.out');reset(input);rewrite(output);
     8    readln(n);dec(n);
     9    for i:=1 to n do f[i]:=i;
    10    fillchar(a,sizeof(a),true);
    11    for i:=2 to n do
    12       if a[i] then
    13          begin
    14             j:=i;while j<=n do begin f[j]:=f[j] div i*(i-1);j:=j+i; end;
    15             j:=i<<1;while j<=n do begin a[j]:=false;j:=j+i; end;
    16          end;
    17    ans:=0;
    18    for i:=1 to n do ans:=ans+f[i];
    19    write(ans<<1+1);
    20    close(input);close(output);
    21 end.
  • 相关阅读:
    LeetCode485 最大连续1的个数
    LeetCode167 两数之和 II
    js浮点数类型
    js整数类型
    js布尔类型
    js重复赋值 js数据交换 js调式方法
    JavaScript变量
    数据类型分类
    重复赋值 数据交换 查看程序执行结果
    JS注释 JS变量
  • 原文地址:https://www.cnblogs.com/Currier/p/6492010.html
Copyright © 2020-2023  润新知