首页 > 其他分享 >Visible Lattice Points 题解

Visible Lattice Points 题解

时间:2023-06-05 17:14:26浏览次数:53  
标签:lfloor gcd int 题解 sum rfloor mu Visible Points

Visible Lattice Points

题目大意

给定一个 \(N×N×N\) 的由若干点组成的立方体,点的坐标从 \((0,0,0)\) 到 \((N,N,N)\),求从点 \((0,0,0)\) 处可以看见多少个点。

思路分析

我们将立方体上的点分成三类:

  • 在 \(xy,yz,xz\) 平面上的点。
  • 在 \(x,y,z\) 轴上的点。
  • 即不在平面,也不在坐标轴上的点。

就可以简单得出我们需要求的式子:

\[\sum_{i=1}^n\sum_{j=1}^n\sum_{k=1}^n[\gcd(i,j,k)=1]+3\sum_{i=1}^n\sum_{j=1}^n[\gcd(i,j)=1]+3 \]

然后就可以开始愉快的颓柿子了:

\[\begin{aligned}&\sum_{i=1}^n\sum_{j=1}^n\sum_{k=1}^n[\gcd(i,j,k)=1]\\&=\sum_{d=1}^n\mu(d)\sum_{i=1}^n\sum_{j=1}^n\sum_{k=1}^n[d|i][d|j][d|k]\\&=\sum_{d=1}^n\mu(d)\lfloor\frac{n}{d}\rfloor^3\end{aligned} \]

类似的,

\[\begin{aligned}&\sum_{i=1}^n\sum_{j=1}^n[\gcd(i,j)=1]\\&=\sum_{d=1}^n\mu(d)\sum_{i=1}^n\sum_{j=1}^m[d|i][d|j]\\&=\sum_{d=1}^n\mu(d)\lfloor\frac{n}{d}\rfloor^2\end{aligned} \]

因此,我们的答案就是:

\[3+\sum_{d=1}^n\mu(d)\lfloor\frac{n}{d}\rfloor^2(\lfloor\frac{n}{d}\rfloor+3) \]

只需要线性筛出 \(\mu\) 的前缀和,再通过整除分块就可以在 \(O(\sqrt n)\) 的时间复杂度内得出结果。

代码:

#include <bits/stdc++.h>
using namespace std;
const int N=1111111,L=1000000;
#define int long long\\好习惯

int T,n,ans,cnt;
int v[N],prime[N],mu[N];

void sieve(){
    mu[1]=1;
    for(int i=2;i<=L;i++){
        if(!v[i]){prime[++cnt]=i;mu[i]=-1;}
        for(int j=1;j<=cnt&&i*prime[j]<=L;j++){
            v[i*prime[j]]=1;
            if(i%prime[j]==0) break;
            mu[i*prime[j]]=-mu[i];
        }
    }
    for(int i=1;i<=L;i++) mu[i]+=mu[i-1];\\计算前缀和
}

signed main(){
    sieve();
    scanf("%lld",&T);
    while(T--){
        scanf("%lld",&n);
        ans=0;
        for(int l=1,r;l<=n;l=r+1){//简单的整除分块
            r=n/(n/l);
            ans+=(mu[r]-mu[l-1])*((n/l)*(n/l)*(3+(n/l)));\\根据式子计算结果
        }ans+=3;
        cout<<ans<<'\n';
    }
    return 0;
}

标签:lfloor,gcd,int,题解,sum,rfloor,mu,Visible,Points
From: https://www.cnblogs.com/TKXZ133/p/17458282.html

相关文章

  • Substring of Sorted String 题解
    SubstringofSortedString写篇题解纪念一下蒟蒻第一次赛时切出的F题。题目简述对一个字符串进行单点修改,区间判断操作。修改操作为将一个字符修改为另一个,判断操作为判断区间是否是整个字符串升序排序后的字串。思路分析蒟蒻第一眼线段树,但刚开始没仔细看题,以为是判断区......
  • DRTREE - Dynamically-Rooted Tree 题解
    DRTREE-Dynamically-RootedTree本题建议评蓝。思路:题目就是要对一颗不定根树求子树权值和。这题不带修,如果带修难度会增加一点,就跟遥远的国度差不多。首先分析一下在以不同根下子树的变化。当一颗树以1号节点为根时,比如说长这样:假设每个点的权值为1,那么这8个点......
  • 逛森林 题解
    P5344逛森林题目大意原题的题目大意已经很明确了要这个干嘛给定一些孤立点,将要进行两种操作:若两点之间不可以通过\(1\)类边连通,则在两点之间连双向\(1\)类边若\(u_1,v_1\)和\(u_2,v_2\)均可以通过\(1\)类边连通,则从\(u_1\tov_1\)的唯一路径上的所有点均向......
  • OTOCI 题解
    OTOCI题目大意给定\(n\)个带权的点,需要进行四种操作:查询两点连通性;加边;修改点权;查询两点路径的权值和。思路分析首先观察题目,我们会发现,在所有的操作结束后,所有的点构成一个森林,这是因为题目中的加边是建立在两点不连通的基础上的,所以不会形成任何的环,到最后自然形成了一个......
  • Sell Pigs 题解
    SellPigs双倍经验题目大意有\(n\)个顾客前来买猪,共有\(m\)个猪圈,每个顾客携带着某一些猪圈的钥匙,需要买一定数量的猪。在顾客买完后,我们可以将打开的猪圈中的猪随意移动,移动完毕后所有的猪圈将关闭,直到下一个顾客到来时才能打开其拥有钥匙对应的猪圈。求最多能卖出多少猪......
  • 旅游 题解
    旅游题目大意对一颗树进行两种操作:将一条从\(u\)到\(v\)的链上的点的权值增加\(x\);查询从\(u\)到\(v\)的链上最大的\(p_i-p_j(dis_{ui}<dis_{uj})\),其中\(p_i\)表示点\(i\)的权值,\(dis_{AB}\)表示点\(A,B\)间唯一路径上边的数量。思路分析先思考,如果没有\(d......
  • Interesting Array 题解
    InterestingArray题目大意构造一个序列\(a\),使其满足若干限制条件,每个限制条件是形如lrq的式子,其意义是:\(\&_{i=l}^ra_i=q\)。题意分析看上去是构造题,实际上是数据结构题。我们不妨先令初始时\(a\)为一个全\(0\)序列,再逐一看每个限制条件。为了满足某一个限制条件......
  • Sum of MSLCM 题解
    SumofMSLCM题目大意定义\(\text{MSLCM}(n)\)为所有满足该数集的\(\text{lcm}\)为\(n\)的数集中元素个数最多的数集的所有数字的和,现有多次询问,求\[\sum_{i=2}^n\text{MSLCM}(i)\]思路分析大水题。虽然看着这个东西很可怕,但仔细一想你就会发现,其实\(\text{MSLCM}(n)......
  • Java模拟表单提交编码不同导致乱码问题解决
    最近有个业务需要模拟表单提交到asp页面中,但是我的项目编码是UTF8,而asp页面是GB2312,中文字段提交后,到达数据库后是乱码.问题的解决在于模拟提交的时候指定编码:我用的HTTP框架是Unirest,代码如下:......
  • 安装Navicat遇到的问题解决
    1、如果遇到安装出现问题,并且不能激活,需要重新卸载安装。需要彻底卸载2、除了点击卸载安装之后,需要注册表删除掉所有的信息,以及删除掉在C:\ProgramFiles\PremiumSoft的Navicat删除掉3、删除注册表Win+R之后输入:regedit进入注册表3.1找到计算机\HKEY_CURRENT_USER\Softwar......