zoukankan      html  css  js  c++  java
  • 【BZOJ2190】【SDOI2008】仪仗队

    Description

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

    Input

      共一个数N。

    Output

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

    Sample Input

      4

    Sample Output

      9


    HINT

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

    Source

    思路:看图,是对称的,以对角线为对称轴分开,先不看特殊的三个点,计算发现行上的点满足欧拉函数,于是线性筛求2~n-1欧拉函数即可,最后别忘了对称和特殊的三个点。时间10sec不线性筛也行?
     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #define N 40000
     5 using namespace std;
     6 int flag[N+10],prime[N+10],phi[N+10];
     7 int n,ans;
     8 void erphi()
     9 {
    10     int k=1;
    11     memset(flag,0,sizeof(flag));
    12     for (int i=2;i<=n;i++)
    13     {
    14         if (!flag[i])    prime[k++]=i,phi[i]=i-1;
    15         for (int j=1;j<k&&i*prime[j]<n;j++)
    16         {
    17             flag[i*prime[j]]=true;
    18             if (i%prime[j]==0)    
    19             {
    20                 phi[i*prime[j]]=phi[i]*prime[j];
    21                 break;
    22             }
    23             else    phi[i*prime[j]]=phi[i]*(prime[j]-1);
    24         }
    25     }
    26     return;
    27 }
    28 int main()
    29 {
    30     scanf("%d",&n);
    31     erphi();
    32     for (int i=2;i<n;i++)
    33         ans+=phi[i];
    34     printf("%d
    ",ans*2+3);
    35     return 0;
    36 }
    —Anime Otaku Save The World.
  • 相关阅读:
    【转】Mybatis常见面试题总结
    【转】深入分析@Transactional的用法
    刷抖音极速版,大家一起来赚钱
    公司喜欢什么样的员工呢?
    边学习新技术边工作的重要性
    聊聊IT行业加班的问题
    软件工程师怎样减轻工作过程中遇到的压力
    如何找兼职工作
    常用的网址导航
    几家主要的配送(跑腿)服务提供商
  • 原文地址:https://www.cnblogs.com/DMoon/p/5189532.html
Copyright © 2011-2022 走看看