• 2190: [SDOI2008]仪仗队


     

    Description

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

    其实就是在数一个n*n的网格可以数出多少条线,然后就是y=kx, 如果在同一条线上一定满足 y*a=k(x*a), 则这里的gcd(y,x)=1,通过观察的在这个红色三角形内可以发现每一个y值对应着小于它的x

    则就是一个欧拉函数。

    #include<iostream>
    #include<cstdio>
    using namespace std;
    #define N int(4e4+10)
    int phi[N], prime[N],tot;
    bool mark[N];
    void getphi()
    {
        int i, j;
        phi[1] = 1;
        for (i = 2; i <= N; i++)
        {
            if (!mark[i])  { prime[++tot] = i; phi[i] = i - 1; }
            for (j = 1; j <= tot; j++)
            {
                if (i*prime[j]>N)  break;
                mark[i*prime[j]] = 1;
                if (i%prime[j] == 0)
                {
                    phi[i*prime[j]] = phi[i] * prime[j]; break;
                }
                else  phi[i*prime[j]] = phi[i] * (prime[j] - 1);
            }
        }
    }
    int main()
    {
        getphi();
        int n, ans = 0;
        scanf("%d", &n);
        for (int i = 1; i < n; ++i)
            ans += phi[i];
        printf("%d
    ", ans * 2 + 1);
        return 0;
    }
  • 相关阅读:
    版本管理系统:svn和git
    Java学习笔记七 常用API对象三
    Java学习笔记六 常用API对象二
    Java学习笔记五 常用API对象一
    Java学习笔记三.3
    Java学习笔记三.2
    Java学习笔记三
    析构函数总结
    C++之类的构造函数,不得不学明白的重点
    C++拷贝构造函数(深拷贝,浅拷贝)
  • 原文地址:https://www.cnblogs.com/ALINGMAOMAO/p/10023605.html
Copyright © 2020-2023  润新知