[SDOI2008] 仪仗队

题目大意:

有一个N*N的方阵,鑫宝在左后方,根据其视线所及的学生人数来判断队是否整齐。当队伍整齐时能看到的学生人数?

分析及求解

  1. 题意转换:通过对题目的分析总结,发现鑫宝所能看见的学生的坐标x与y互质,即:题目转换为求解N*N的矩阵中横纵坐标互质的点的个数。
  2. 题目求解:首先先将鑫宝周围三个点拿走,其次再以主对角线为分界线,可以得到剩余的点关于主对角线对称,最后注意一个易错点,横纵坐标轴从0开始。
  3. 链接知识点:线性筛、积性函数(欧拉函数)
  4. 代码分析:
    #include <bits/stdc++.h>
    using namespace std;
    
    int N,pi[40010],v[40010],prime[40010],cnt;
    long long ans;
    int main()
    {
        scanf("%d",&N);
        N--;
        for (int i = 2;i <= N;i++){
            if (!v[i]) v[i] = i,pi[i] = i - 1,prime[++cnt] = i;
            for (int j = 1;j <= cnt;j++){
                if (prime[j] > v[i] || i * prime[j] > N) break;
                v[i * prime[j]] = prime[j];
                if(v[i] == prime[j]) pi[v[i] * i] = v[i] * pi[i]; //定义求解欧拉函数
                else pi[prime[j] * i] = pi[prime[j]] * pi[i]; //积性函数的性质求解欧拉函数
            }
            ans += pi[i];
        }
        ans *= 2;
        ans += 3;
        cout << ans;
        
        return 0;
    }


全部评论

相关推荐

希望各位大哥分享一下自己的看法,对于机器人行业确实不太了解
绝顶但不聪明:如果是机器人相关岗位,优先优必选(专门***器人的),其他岗位选小米
投递小米集团等公司10个岗位 > 牛客解忧铺 牛客在线求职答疑中心
点赞 评论 收藏
分享
totoroyyw:千年老妖😂
投递华为等公司10个岗位
点赞 评论 收藏
分享
10-17 12:16
同济大学 Java
7182oat:快快放弃了然后发给我,然后让我也泡他七天最后再拒掉,狠狠羞辱他一把😋
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务