【数论】莫比乌斯反演证明+HDU6053(莫比乌斯函数)

预备知识:

  • a|nan
  • μ(d)
    • d=1 ,则 μ(d)=1
    • d=p1p2p3pk pi 为互异素数,则有 μ(d)=(1)k
    • 其他情况下 μ(d)=0 ;
    • 函数图

算法内容:

已知:

F(N)=d|nf(d)

则:

f(n)=d|nμ(d)F(nd)


证明:

首先,证明对于任意正整数 n 有:

d|nμ(d)={1,0,n = 1> 1

  • n=1 时,显然成立。
  • n1 时,将 n 分解为n=pa11pa22pa33pakk

n 的所有因子中, 只有当所有质因子的次数都为1 μ() 的函数值才不为 0 我们枚举n的所有因子,这些因子是由质因子p组合而成,而使用r个质因子组合而成的因子个数有 Crk 个,再乘上 μ() 函数,有:

d|nμ(d)=C0kC1k+C2k++(1)kCkk=i=1k(1)iCik

根据二项式定理:

(x+y)k=i=1kCikxiyki

代入 x=1,y=1 得:

0=i=1k(1)iCik

于是证得:

d|nμ(d)={1,0,n=1>1


莫比乌斯反演定理推导:

d|nμ(d)F(nd)=d|nμ(d)k|ndf(k)

d|nμ(d)k|ndf(k)=d|nf(k)d|nkμ(d)

②式是由已知推得。这里重点理解一下③式。

在这之前值得注意的是:因为 k nd的一个因子,所以存在一个整数 p 使得pkd=n,故 nd nk 的效果是一样的。

这时再讨论③式,则变成一个等式左边和等式右边交换了求和上限的问题。这两个式子是先求和再乘,而不是先乘再求和至于为什么相等,我们可以用代码的形式来解释,这样更直观:

int ans = 0;
for (int i = 1; i < a; ++a)
{
    for (int j = 5; j < b; j += 2)
    {
        ans += i * j;
    }
} 

//another verison
ans = 0;
for (int i = 5; i < b; ++i)
{
    for (int j = 1; j < a; ++j)
    {
        ans += i * j;
    }
}

我们可以发现,交换两层循环,最后ans的值是不变的。故他们交换求和上限是相等的。

对于③式,由①式可知:当且仅当 bk=1

d|ndμ(d)=1

故:

d|nf(k)d|nkμ(d)=f(n)

故:

d|nμ(d)F(nd)=f(n)

至此,莫比乌斯反演证明完毕。


题目:TrickGCD(HDU6053)

Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 2443 Accepted Submission(s): 935

Problem Description
You are given an array A , and Zhu wants to know there are how many different array B satisfy the following conditions?

  • 1≤Bi≤Ai
  • For each pair( l , r ) (1≤l≤r≤n) , gcd(bl,bl+1…br)≥2

Input
The first line is an integer T(1≤T≤10) describe the number of test cases.

Each test case begins with an integer number n describe the size of array A.

Then a line contains n numbers describe each element of A

You can assume that 1≤n,Ai≤105

Output
For the kth test case , first output “Case #k: ” , then output an integer as answer in a single line . because the answer may be large , so you are only need to output answer mod 109+7

Sample Input
1
4
4 4 4 4

Sample Output
Case #1: 17

题意:

已知数组A,要求一个数组B。其中数组B需要满足的条件有:

  • 1BiAi
  • 对于任意一对 (l,r) gcd(bi,bi+1,bi+2,,br)2

由样例我们想到,凡是2的倍数一定符合条件、3的倍数也符合条件,于是我们自然想到求出 2min(A) 的倍数的个数,然后相乘相加。

但是再想一层,有重复计算。故用简单的容斥定理奇加偶减来进行去重。

重点在于如何判断是奇是偶呢?这时候用到了莫比乌斯函数,最后推得

ans=x=2min(A)[μ(x)i=0nA[i]x]


感想:

这里有一个有关线性筛的想法。大家都在想,比如从1到12,为什么有的数是加,有的数是减,有的数系数是 μ(x)=0 。这里提几点:

  • 质数只能由它本身得到
  • 合数可以分解为一个最小素因子 p <script type="math/tex" id="MathJax-Element-47">p</script>和另一个数乘积的形式
  • 如果一个数质因子分解后,全是互异素数,则这个数只能由这些互异素数相乘得到

补题太慢了,尤其是这种数学题,本蒟蒻只能每个知识点都回头再看一遍,才能弄懂一点点……

添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值