zoukankan      html  css  js  c++  java
  • [SDOI2008]仪仗队

    题目描述

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

    输入输出格式

    输入格式:

     

    共一个数N

     

    输出格式:

     

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

     

    输入输出样例

    输入样例#1: 
    4
    输出样例#1: 
    9

    说明

    【数据规模和约定】

    对于 100% 的数据,1 ≤ N ≤ 40000

    这道题其实挺水的,就是求一下互质的点的个数。n开到40000,所以n方肯定不行,现行算一下互质的个数就可以了。

    代码如下:

     1 #include<cstdio>
     2 #include<cmath>
     3 #include<algorithm>
     4 using namespace std;
     5 typedef long long ll;
     6 ll read() {
     7     ll a = 0,b = 1;
     8     char c = getchar();
     9     while(c < '0' or c > '9') {
    10         if(c == '-') b = -1;
    11         c = getchar();
    12     }
    13     while(c >= '0' and c <= '9') {
    14         a = a * 10 + c - '0';
    15         c = getchar();
    16     }
    17     return a * b;
    18 }
    19 ll n,ans = 0,e[40010];
    20 ll gcd(ll a,ll b) {
    21     if(b > a) swap(a,b);
    22     if(b == 0) return a;
    23     return gcd(b,a % b);
    24 }
    25 int main() {
    26     n = read();
    27     ans = 2;
    28     if(n==1) {
    29         printf("0");
    30         return 0;
    31     }
    32     for(int i=1; i<=n; ++i)e[i]=i;
    33     for(int i=2; i<=n; ++i) {
    34         if(e[i]==i) {
    35             for(int j=i; j<=n; j+=i) {
    36                 e[j]=e[j]/i*(i-1);
    37             }
    38         }
    39     }
    40     --n;
    41     for(int i=2; i<=n; ++i) {
    42         ans+=e[i]*2;
    43     }
    44     printf("%lld",ans+1);
    45     return 0;
    46 }
  • 相关阅读:
    MySql.Data.dll的版本
    发现一个“佛系记账本”
    坚果云无法同步SVN文件夹
    Kali Linux打开多个终端窗口
    修改Kali Linux终端主题
    Kali Linux搜索软件包
    指定无线网卡监听信道
    解决Aireplay-ng信道问题
    查看干扰进程
    使用Kali官网提供的虚拟机系统
  • 原文地址:https://www.cnblogs.com/qmcp/p/9837968.html
Copyright © 2011-2022 走看看