BZOJ 4174 tty的求助 莫比乌斯反演

原创 2015年07月09日 19:13:24

题目大意:求Nn=1Mm=1m1k=0nk+xm mod 998244353

假设nm都已经确定了,现在要求这坨玩应:
m1k=0nk+xm
=m1k=0(nk%m+xm+nknk%mm)
=m1k=0(nk%m+xm+nkmnk%mm)

我们一项一项考虑

d=gcd(n,m),那么有

m1k=0nk%m+xm
=dmd1k=0kd+xm
=d(mdxx%mm+md1k=0kd+x%mm)
=d(mdxx%mm+md1k=0[kd+x%mm])
=d(xx%md+x%md)
=dxd

m1k=0nkm=nmm(m1)2=nmn2

m1k=0nk%mm=dmd1k=0kdm=d2m(md1)md2=md2

故答案为
Nn=1Mm=1(dxd+nmn2md2)
=12Nn=1Mm=1(2dxd+d+nmnm)
=12(S(N)S(M)S(N)mS(M)n+min(N,M)d=1(d+2dxd)min(Nd,Md)k=1μ(k)NdkMdk)

其中S(n)=n(n+1)2

然后O(nlogn)枚举dk即可

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define M 500500
#define MOD 998244353
using namespace std;
int n,m,x;
long long ans;
int mu[M];
int prime[M],tot;
bool not_prime[M];
void Linear_Shaker()
{
    int i,j;
    mu[1]=1;
    for(i=2;i<=500000;i++)
    {
        if(!not_prime[i])
        {
            prime[++tot]=i;
            mu[i]=MOD-1;
        }
        for(j=1;prime[j]*i<=500000;j++)
        {
            not_prime[prime[j]*i]=true;
            if(i%prime[j]==0)
            {
                mu[prime[j]*i]=0;
                break;
            }
            mu[prime[j]*i]=(MOD-mu[i])%MOD;
        }
    }
}
long long Sum(long long n)
{
    return (n*(n+1)>>1)%MOD;
}
int main()
{
    int i,j;
    cin>>n>>m>>x;
    Linear_Shaker();
    ans=((Sum(n)*Sum(m)-Sum(n)*m-Sum(m)*n)%MOD+MOD)%MOD;
    if(n>m) swap(n,m);
    for(i=1;i<=n;i++)
    {
        long long temp=i+x/i*i*2;
        for(j=1;j*i<=n;j++)
            (ans+=temp*mu[j]%MOD*(n/i/j)%MOD*(m/i/j)%MOD)%=MOD;
    }
    cout<<(ans*(MOD+1>>1)%MOD)<<endl;
    return 0;
}

BZOJ 3930 CQOI2015 选数 莫比乌斯反演

题目见 http://pan.baidu.com/s/1o6zajc2 此外不知道H-L #include #include #include #include #includ...
  • PoPoQQQ
  • PoPoQQQ
  • 2015年04月07日 11:16
  • 18661

[BZOJ4407]于神之怒加强版(莫比乌斯反演)

题目描述传送门题解感觉这题非常强 假设n
  • Clove_unique
  • Clove_unique
  • 2017年03月18日 23:37
  • 445

BZOJ 4176 Lucas的数论 莫比乌斯反演

题目大意:给定n(n≤109)n(n\leq10^9),求∑ni=1∑nj=1d(ij)\sum_{i=1}^n\sum_{j=1}^nd(ij)推错式子害死人。。。 由d|ijd|ij等价于dgc...
  • PoPoQQQ
  • PoPoQQQ
  • 2015年07月10日 18:20
  • 2911

bzoj1101(莫比乌斯反演)

比上题简单多了,关键还是数据小管用。。 不过这道题,卡时卡的太紧了 首先对一些常数需要进行潜在的关注 1:能用int,就不要用long long,测试的时候发现long long 比int慢一倍,...
  • zhhx2001
  • zhhx2001
  • 2016年08月24日 23:36
  • 209

【bzoj2694】Lcm 莫比乌斯反演

Description对于任意的>1的n gcd(a, b)不是n^2的倍数 也就是说gcd(a, b)没有一个因子的次数>=2Input一个正整数T表示数据组数 接下来T行 每行两个正整数 表示...
  • LOI_DQS
  • LOI_DQS
  • 2016年01月25日 21:35
  • 921

BZOJ 2818(莫比乌斯反演)

最近刚看莫比乌斯反演  数学不好是硬伤啊 不过总算跑出来了 第一种是没优化的跑这题 #include #include using namespace std; const int maxn ...
  • Below_Crusder
  • Below_Crusder
  • 2016年05月02日 19:43
  • 299

BZOJ(本校) 2525 公约数 - 莫比乌斯反演

题目描述 给出一个数N,求1
  • yuanxinyu402
  • yuanxinyu402
  • 2016年01月27日 10:22
  • 231

莫比乌斯反演初步

莫比乌斯反演是数论中很重要的内容,可以优雅解决很多数论的问题。之前浅学了一下,这两天寒假专题训练又拾起来刷了些题,想总结一下。由于内容较多本文证明部分会跳过一些,更着重于莫比乌斯反演在解题中的实际应用...
  • NExPlain
  • NExPlain
  • 2014年02月06日 23:47
  • 1590

莫比乌斯反演套路1_线性筛法

线性筛法是O(n),不然它就不叫线性。
  • Cold_Chair
  • Cold_Chair
  • 2017年01月20日 22:22
  • 348

【数论】bzoj4174tty的求助

题目链接 (ps:这是一道权限题…)计算∑n=1N∑m=1M∑k=0m−1⌊nk+xm⌋\sum_{n=1}^N\sum_{m=1}^M\sum_{k=0}^{m-1}\lfloor\frac{nk...
  • acmer_cheer
  • acmer_cheer
  • 2016年04月29日 17:37
  • 241
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:BZOJ 4174 tty的求助 莫比乌斯反演
举报原因:
原因补充:

(最多只允许输入30个字)