• BJOJ2190|SDOI仪仗队|数论


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

         

    现在,C君希望你告诉他队伍整齐时能看到的学生人数。
    Input
    共一个数N。
    Output
    共一个数,即C君应看到的学生人数。
    Sample Input
    4
    Sample Output
    9
    HINT
    【数据规模和约定】对于100% 的数据,1≤N≤40000

    分析:这一道题我们可以发现,如果(x,y)能看见,那么(kx,ky)就看不见。也就是说,只有当x和y互质的时候,我们才能看见。

    又根据上图的对称性,我们可以只算一半。注意(1,1)算了两遍,(0,1)(1,0)没有算上。

    #include<iostream>
    using namespace std;
    
    int ans, n, a[40001];
    
    int main() 
    {
        cin >> n;
        n--;
        for (int i=1; i<=n; i++) a[i]=i;        //PHI(I)
        for (int i=2; i<=n; i++)      //筛法求phi(i)
            if (a[i]==i) 
            {
                int p=1;
                while (p*i<=n) 
                {
                    a[p*i]=a[p*i]/i*(i-1);
                    p++;
                }
            }
        for (int i=1; i<=n; i++) ans+=a[i];
        ans=ans*2+1;  
        cout << ans;
        return 0;
    }
  • 相关阅读:
    清除缓存
    框架更新 (简)
    Xutils简
    动画
    夜间模式
    TabLoaout简单框架
    atomic原子类的理解
    单例模式中指令重排序及需要使用volatile的理解
    对volatile的理解
    jvm内存模型及垃圾回收GC
  • 原文地址:https://www.cnblogs.com/Shymuel/p/4650292.html
Copyright © 2020-2023  润新知