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


    2190: [SDOI2008]仪仗队

    Time Limit: 10 Sec  Memory Limit: 259 MB
    Submit: 3203  Solved: 2062
    [Submit][Status][Discuss]

    Description

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

    Input

      共一个数N。

    Output

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

    Sample Input

      4

    Sample Output

      9


    HINT

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

    /*
    可以将最左下的点标为(0,0), 那么显然如果存在一个点(x,y), 且有gcd(x; y) = k (k .= 1),
    那么点(x/k,y/k) .定会将点(x,y) 挡住.
    如果k = 1, 那么点(x, y) .定会被看到
    所以点(x, y)被看到的充分必要条件是Gcd(x, y) == 1;
    我们考察矩阵的下三角形,考察他的每一行,可以发现,这一行能够被看到的点的数目就是phi(x)
    答案不难发现是∑(phi[x])*2+1(容斥原理)
    */ 
    
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    
    #define N 50007
    
    using namespace std;
    int prime[N];
    bool not_prime[N];
    int n,ans,tot=1;
    
    void pr_()
    {
        prime[1]=2;not_prime[1]=true;
        for(int i=2;i<=N;i++)
        {
            if(!not_prime[i]) prime[++tot]=i;
            for(int j=1;j<=tot && i*prime[j]<=N;j++)
            {
                not_prime[i*prime[j]]=true;
                if(i%prime[j]) break;
            }
        }
    }
    
    int get_phi(int x)
    {
        int ret=1;
        for(int i=1;prime[i]*prime[i]<=x;i++)
        {
            if(x%prime[i]==0)
            {
                ret*=prime[i]-1;x/=prime[i];
                while(x%prime[i]==0) x/=prime[i],ret*=prime[i];
            }
        }
        if(x>1) ret*=x-1;
        return ret;
    }
    
    int main()
    {
        scanf("%d",&n);
        pr_();
        for(int i=1;i<n;i++) ans+=get_phi(i);
        ans*=2;ans+=1;
        printf("%d
    ",ans);
        return 0;
    }
    折花枝,恨花枝,准拟花开人共卮,开时人去时。 怕相思,已相思,轮到相思没处辞,眉间露一丝。
  • 相关阅读:
    一道小学数学题
    Ubuntu下使用git提交代码至GitHub
    C#几个小知识点
    C#中巧用#if DEBUG 进行调试
    使用 HPC Pack 为 Azure 中的 Windows HPC 工作负荷创建和管理群集的选项
    使用 Chef 自动执行 Azure 虚拟机部署
    在 Azure 中管理 Windows 虚拟机的可用性
    什么是 Azure 中的虚拟机规模集?
    从 Azure 下载 Windows VHD
    如何使用 Packer 在 Azure 中创建 Windows 虚拟机映像
  • 原文地址:https://www.cnblogs.com/L-Memory/p/7241727.html
Copyright © 2020-2023  润新知