zoukankan      html  css  js  c++  java
  • 【BZOJ】2190 [SDOI2008]仪仗队(欧拉函数)

    Description

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

    Input

      共一个数N。

    Output

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

    Sample Input

      4

    Sample Output

      9


    HINT

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

    -----------------------------------------------------------------------------------------------------

    分析:第一眼看到题,突然想到扩欧(滑稽),但仔细分析一下,站在C君处,如果看见了一个坐标(x,y),此坐标后的(2x,2y)(3x,3y)(4x,4y)(5x,5y)都看不见了,换句话说,只要是x,y不互质的点都看不见。所以题目就变成了求n范围内的互质的数的组数。跑一边欧拉筛法即可。

     1 #include <cstdio>
     2 #include <algorithm>
     3 #include <cmath>
     4 const int maxn=40000;
     5 int phi[maxn];
     6 int phis(int n)//筛法 
     7 {
     8     for(int i=2;i<=n;i++) phi[i]=0;
     9     phi[1]=1;
    10     for(int i=2;i<n;i++)
    11     {
    12         if(!phi[i])
    13         for(int j=i;j<=n;j+=i)
    14         {
    15             if(!phi[j]) phi[j]=j;
    16             phi[j]=phi[j]/i*(i-1);
    17         }
    18     }
    19     return 0;
    20 }
    21 int main()
    22 {
    23     int n;
    24     long long sum=0;
    25     scanf("%d",&n);
    26     phis(n);
    27     for(int i=2;i<=n-1;i++)
    28     {
    29         sum+=phi[i];
    30     }
    31     printf("%lld",sum*2+3);//x,y对称,所以sum*2,加3是因为没算(1,0)(1,1)(0,1) 
    32     return 0;
    33 }
  • 相关阅读:
    PCA手写版 Learner
    泛解析和伪静态实现二级域名(net技术)
    内存分配笔记(一)
    NVelocity的使用总结
    从discuz 里扒过来的一个通用序列化和反序列化类
    类中的执行顺序
    Nhibernate 工具 Nh profiler 使用方法
    UML中几种类间关系
    golf的23种设计模式
    net中的定时器
  • 原文地址:https://www.cnblogs.com/noblex/p/7535245.html
Copyright © 2011-2022 走看看