【数论】莫比乌斯反演证明+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>和另一个数乘积的形式
  • 如果一个数质因子分解后,全是互异素数,则这个数只能由这些互异素数相乘得到

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大学生参加学科竞赛有着诸多好处,不仅有助于个人综合素质的提升,还能为未来职业发展奠定良好基础。以下是一些分析: 首先,学科竞赛是提高专业知识和技能水平的有效途径。通过参与竞赛,学生不仅能够深入学习相关专业知识,还能够接触到最新的科研成果和技术发展趋势。这有助于拓展学生的学科视野,使其对专业领域有更深刻的理解。在竞赛过程中,学生通常需要解决实际问题,这锻炼了他们独立思考和解决问题的能力。 其次,学科竞赛培养了学生的团队合作精神。许多竞赛项目需要团队协作来完成,这促使学生学会有效地与他人合作、协调分工。在团队合作中,学生们能够学到如何有效沟通、共同制定目标和分工合作,这对于日后进入职场具有重要意义。 此外,学科竞赛是提高学生综合能力的一种途径。竞赛项目通常会涉及到理论知识、实际操作和创新思维等多个方面,要求参赛者具备全面的素质。在竞赛过程中,学生不仅需要展现自己的专业知识,还需要具备创新意识和解决问题的能力。这种全面的综合能力培养对于未来从事各类职业都具有积极作用。 此外,学科竞赛可以为学生提供展示自我、树立信心的机会。通过比赛的舞台,学生有机会展现自己在专业领域的优势,得到他人的认可和赞誉。这对于培养学生的自信心和自我价值感非常重要,有助于他们更加积极主动地投入学习和未来的职业生涯。 最后,学科竞赛对于个人职业发展具有积极的助推作用。在竞赛中脱颖而出的学生通常能够引起企业、研究机构等用人单位的关注。获得竞赛奖项不仅可以作为个人履历的亮点,还可以为进入理想的工作岗位提供有力的支持。
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值