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

    题目大意:

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


    思路:

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

     

    代码:

    #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;
    }
  • 相关阅读:
    Java异常处理和设计
    一次qps测试实践
    Alternate Task UVA
    Just Another Problem UVA
    Lattice Point or Not UVA
    Play with Floor and Ceil UVA
    Exploring Pyramids UVALive
    Cheerleaders UVA
    Triangle Counting UVA
    Square Numbers UVA
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/9320577.html
Copyright © 2011-2022 走看看