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

    Solution

    首先设左下角坐标为(0,0)
    那么很容易发现:
    一个人如果是不可视的,那么他的坐标(x,y)一定含有公约数k
    使得一个人(x/k,y/k)可以挡住他。
    那么只要一个人的横纵坐标互质,就是可以被看见的
    那么问题就转化成了对于每个1~n中的数,有多少个1~n的数与其互质
    然后我们又可以发现答案关于(0,0)->(n,n)轴对称
    所以我们只算一半即可。
    然后就可以把问题转化为求和欧拉函数的φ(1)~φ(n)了
    注意n=1的时候特判一下

    Code

     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 int ans,n,phi[40005];
     5 
     6 void Euler()
     7 {
     8     phi[1]=1;
     9     for (int i=2;i<=40000;++i)
    10         if (!phi[i])
    11             for (int j=i;j<=40000;j+=i)
    12             {
    13                 if (!phi[j]) phi[j]=j;
    14                 phi[j]=phi[j]/i*(i-1);
    15             }
    16 }
    17 
    18 int main()
    19 {
    20     scanf("%d",&n);
    21     Euler();
    22     for (int i=1;i<n;++i)
    23         ans+=phi[i];
    24     printf("%d",ans*2+(n!=1));
    25 }
  • 相关阅读:
    jQuery获取各种标签的文本和value值
    python中base64编码与解码
    Django 的 slug url 正则匹配
    JavaScript base64 加密解密
    HTML引入外部JS文件
    CSS样式的引入方式
    Django 配置404页面
    selenium 基本操作
    python 启动pydoc查看文档
    selenium webdriver
  • 原文地址:https://www.cnblogs.com/refun/p/8776284.html
Copyright © 2011-2022 走看看