zoukankan      html  css  js  c++  java
  • 仪仗队【数论】

    题目大意:

    给出(n,n)的矩阵,求从(1,1)能看到多少个点。
    Input

    4

    Output

    9

    这里写图片描述


    思路:

    数论。
    这道题如果我们不看(2,2)(2,1)(1,2)这三个点的话,就会发现,只有当gcd(x,y)=1时才能看见。而这道题如果沿着左下角到右上角的正方形对角线切分的话,又会发现左右两半时一样的。而“一半”又表明x<y,所以如果要同时满足这两个条件,就只有φ(y)个。再加上一开始省略的(2,2)(2,1)(1,2),所以,这道题就是要我们求

    i=2nφ(i)+3


    代码:

    #include <cstdio>
    #include <iostream>
    using namespace std;
    
    int p[100001],s,n;
    
    int main()
    {
        cin>>n;
        if (n==1) return printf("0")&0;  //特判
        n--;
        for (int i=2;i<=n;i++)
         p[i]=i;  //初始化
        for (int i=2;i<=n;i++)
        {
            if (p[i]==i)
             for (int j=i;j<=n;j+=i)
              p[j]=p[j]/i*(i-1);  
            s+=p[i];  //记录能看到的数量
        } 
        cout<<s*2+3<<endl;
        return 0;
    }
  • 相关阅读:
    favicon.ico请求处理
    Node.js学习(Node.js基础)
    实现主机访问虚拟机网页的方法总结
    有向/无向图中搜环
    后缀自动机
    莫队算法
    A* 算法求第k短路径
    次小生成树算法
    AC自动机详解
    Link-Cut-Tree详解
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/11998871.html
Copyright © 2011-2022 走看看