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;
    }
  • 相关阅读:
    元素的属性
    表单
    Array数组类
    string类
    js数据类型以及原型分析
    this
    有关兼容性的解决
    单位
    滚动条 和 背景位置及绝对定位
    圣杯布局 和 双飞翼布局
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/11998871.html
Copyright © 2011-2022 走看看