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;
    }
  • 相关阅读:
    UIButton组件
    九宫格
    window对象的创建
    UILabel的属性及方法
    javascript相关,格式转化
    MySQL分区分表相关知识摘要
    redis简单笔记
    PHP常用设计模式
    在nginx上面部署多个项目
    把自己的项目上传到svn上面
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/11998871.html
Copyright © 2011-2022 走看看