【题解】Luogu P4450 双亲数

原题传送门

这题需要运用莫比乌斯反演(懵逼钨丝繁衍)

设F(t)表示满足gcd(x,y)%t=0的数对个数,f(t)表示满足gcd(x,y)=t的数对个数,实际上答案就是f(d)

这就满足莫比乌斯反演的关系式了

显然我们珂以得知F(t)=(b/t)*(d/t)

我们根据反演的第二个公式便珂以得出

\[f(d)=\sum_{n|d}\mu(\frac{d}{n})F(d)\]

在用下整除分块就过了

#include <bits/stdc++.h>
#define N 1000005
#define ll long long
#define getchar nc
using namespace std;
inline char nc(){
    static char buf[100000],*p1=buf,*p2=buf;
    return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
inline int read()
{
    register int x=0,f=1;register char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
    return x*f;
}
inline void write(register ll x)
{
    if(!x)putchar('0');if(x<0)x=-x,putchar('-');
    static int sta[20];register int tot=0;
    while(x)sta[tot++]=x%10,x/=10;
    while(tot)putchar(sta[--tot]+48);
}
inline int Min(register int a,register int b)
{
    return a<b?a:b;
}
int miu[N],v[N];
ll sum[N];
int main()
{
    for(register int i=1;i<=N;++i)
        miu[i]=1,v[i]=0;
    for(register int i=2;i<=N;++i)
    {
        if(v[i])
            continue;
        miu[i]=-1;
        for(register int j=i<<1;j<=N;j+=i)
        {
            v[j]=1;
            if((j/i)%i==0)
                miu[j]=0;
            else
                miu[j]*=-1;
        }
    }
    for(register int i=1;i<=N;++i)
        sum[i]=sum[i-1]+miu[i];
    int a=read(),b=read(),k=read();
    int maxround=Min(a/k,b/k);
    ll ans=0;
    for(register int l=1,r;l<=maxround;l=r+1)
    {
        r=Min((a/k)/((a/k)/l),(b/k)/((b/k)/l));
        ans+=(ll)((a/k)/l)*((b/k)/l)*(sum[r]-sum[l-1]);
    }
    write(ans);
    return 0;
 } 

原文地址:https://www.cnblogs.com/yzhang-rp-inf/p/10133964.html

时间: 2024-08-03 15:13:19

【题解】Luogu P4450 双亲数的相关文章

P4450 双亲数

思路 同zap-queries 莫比乌斯反演的板子 数据范围小到不用整除分块... 代码 #include <cstdio> #include <algorithm> #include <cstring> #define int long long using namespace std; int mu[1010000],isprime[1010000],iprime[1010000],cnt,n,m,d; void prime(int n){ isprime[1]=t

[P4450] 双亲数 - 莫比乌斯反演,整除分块

模板题-- \[\sum\limits_{i=1}^a\sum\limits_{j=1}^b[(i,j)=k] = \sum\limits_{i=1}^a\sum\limits_{j=1}^b[k|i][k|j][({i\over k},{j\over k})=1]=\sum\limits_{i=1}^{a\over k}\sum\limits_{j=1}^{b\over k}[(i,j)=1]\] 继续化简 \[\sum\limits_{i=1}^{b\over k}\sum\limits_{

2045: 双亲数

2045: 双亲数 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 659  Solved: 302[Submit][Status][Discuss] Description 小D是一名数学爱好者,他对数字的着迷到了疯狂的程度. 我们以d = gcd(a, b)表示a.b的最大公约数,小D执著的认为,这样亲密的关系足可以用双亲来描述,此时,我们称有序数对(a, b)为d的双亲数. 与正常双亲不太相同的是,对于同一个d,他的双亲太多了 >_< 比如

【BZOJ2045】双亲数 莫比乌斯反演

[BZOJ2045]双亲数 Description 小D是一名数学爱好者,他对数字的着迷到了疯狂的程度. 我们以d = gcd(a, b)表示a.b的最大公约数,小D执著的认为,这样亲密的关系足可以用双亲来描述,此时,我们称有序数对(a, b)为d的双亲数. 与正常双亲不太相同的是,对于同一个d,他的双亲太多了 >_< 比如,(4, 6), (6, 4), (2, 100)都是2的双亲数. 于是一个这样的问题摆在眼前,对于0 < a <= A, 0 < b <= B,有

题解 luogu P5021 【赛道修建】

题解 luogu P5021 [赛道修建] 时间:2019.8.9 20:40 时间:2019.8.12 题目描述 C 城将要举办一系列的赛车比赛.在比赛前,需要在城内修建 \(m\) 条赛道. C 城一共有 \(n\) 个路口,这些路口编号为 \(1,2,\dots,n\),有 \(n-1\) 条适合于修建赛道的双向通行的道路,每条道路连接着两个路口.其中,第 \(i\) 条道路连接的两个路口编号为 \(a_i\) 和 \(b_i\),该道路的长度为 \(l_i\).借助这 \(n-1\) 条

BZOJ 2045: 双亲数

2045: 双亲数 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 848  Solved: 406[Submit][Status][Discuss] Description 小D是一名数学爱好者,他对数字的着迷到了疯狂的程度. 我们以d = gcd(a, b)表示a.b的最大公约数,小D执著的认为,这样亲密的关系足可以用双亲来描述,此时,我们称有序数对(a, b)为d的双亲数. 与正常双亲不太相同的是,对于同一个d,他的双亲太多了 >_< 比如

双亲数 容斥

小D是一名数学爱好者,他对数字的着迷到了疯狂的程度.我们以d = gcd(a, b)表示a.b的最大公约数,小D执著的认为,这样亲密的关系足可以用双亲来描述,此时,我们称有序数对(a, b)为d的双亲数.与正常双亲不太相同的是,对于同一个d,他的双亲太多了 >_<比如:(4, 6), (6, 4), (2, 100)都是2的双亲数.于是一个这样的问题摆在眼前,对于0 < a <= A, 0 < b <= B,有多少有序数对(a, b)是d的双亲数? 题意就是求满足0&l

题解 luogu P1850 【换教室】

题解 luogu P1850 [换教室] 时间:2019.8.6 一晚上(约 3.5h 写完) 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 \(2n\) 节课程安排在 \(n\) 个时间段上.在第 \(i\)(\(1 \leq i \leq n\))个时间段上,两节内容相同的课程同时在不同的地点进行,其中,牛牛预先被安排在教室 \(c_i\) 上课,而另一节课程在教室 \(d_i\) 进行. 在不提交任何申请的情况下,学生们需要

Luogu P2657 windy数 题解报告

题目传送门 [题目大意] 定义不含前导零且相邻两个数字之差至少为2的数为$windy$数,求在$[A,B]$这个区间内存在多少$windy$数. [思路分析] 好的据说这是一道数位DP板子题……$mark$一下,不过说实话这题难道不是记忆化搜索吗???QAQ 我们首先把问题转化成求$[1,B]$之间的$windy$数减去$[1,A-1]$之间的$windy$数,然后单独考虑. 设$f[i][j]$表示到第$i$位,前一位数字为$j$的方案数.然后我们为了保证数字不超出范围,要加一个变量记录是否有