zoukankan      html  css  js  c++  java
  • 数论十(一)题

    Problem Zero:[neerc2011]Gcd guessing game

    现在有一个数x,1 ≤ x≤ n,告诉你n,每次你可以猜一个数y,如果x==y则结束,否则返回gcd(x,y),问最少只要几次就可以保证猜出答案。

     

    本题纯属娱乐。仅仅是一个GCD的游戏,跑题了。

    因为本题要求最坏情况,我们直观地猜想就是每次返回都是1。由于答案有可能是质数,而判定一个数,必须要把含有这个质因子的数问一遍。于是,我们引出这样一个思路,将所有1-n的质数分组,每组的积<=n,答案就是组数。

    这个问题可以贪心解决。每个大质数配上连续一段的小质数。

     

     

    Problem One:[CQOI2007 余数之和sum]sigma(K%i),1 ≤ i ≤ n

     

    K%i=K-(K/i)*i,对于i至K/(K/i)这一段K/i相同,可以一起算,可证总段数是sqrt(N)的。

    复杂度:O(Sqrt(N))

     

     

    Problem Two:[Longge's problem]sigma(gcd(i, n)) ,1 ≤ i ≤ n.

     

    枚举d=gcd(i, n),由于小于n的数里gcd(i,n)=d的i一共有phi(n/d)个,所以Ans=Sigma(phi(N/d)),d|n.复杂度:O(k*sqrt(N))

     

     

    Problem Three:[SPOJ LCMSUM]sigma(lcm(i, n)),1 ≤ i ≤ n. 多组询问

     

    令S(i)= Sigma(i,i|n) =>iphi(i)/2

    则Ans=nSigma(S(d),d|n)

    直接做预处理phi(i),然后枚举约数,复杂度:O(N)-O(sqrt(N)).

    令G(i)=iphi(i)/2,i|n,不难发现Ans=N((G(N)-1)/2+1).

    由于可证G(N)是积性函数,所以我们可以在O(N)的时间内算出G(N),询问O(1).

     

     

    Problem Four:[SPOJ GCDEX]sigma(gcd(i, j)), 1 ≤ i < j ≤ n 多组询问

     

    可以枚举j变为Problem Two。无疑会TLE。

    令T(N)=sigma(gcd(i,n)),1 ≤ i ≤ n,不难看出Ans=simga(T(i)) ,1 ≤ i ≤ n。

    T(N)的函数与Problem Two相同,所以T(N)等价于sigma(N/d*phi(d)),d|N.

    根据T(n)的定义,我们有T(1)=1,T(p^x)=p*T(p^(x-1))+phi(p^x).

    由于可证T(N)是积性函数,所以我们可以在O(N)的时间内算出T(N),询问O(1).

     

     

     

    Problem Five:[双亲数/POI Zap(多组)]求gcd(i, j) == d (i ≤ a, j ≤ b) 的对数

     

    Ans=gcd(i,j)=1 (i ≤ a/d, j ≤ b/d) 

    F(x)表示gcd(i,j)>=x的对数,则F(x)=a/x*b/x

    根据容斥原理:Ans=sigma(F(i)*u(i)),1 ≤ i ≤ n.

    可以看出莫比乌斯反演的本质就是容斥

    对于单个询问,显然可以O(N)求解。

    对于多组数据,类比Problem One,不难可以推广得出a/x*b/x对于连续一段值是相同的,可证总段数是sqrt(N)+sqrt(M)的。于是我们O(N)求出F(x)后预处理前缀和,询问O(sqrt(N))

     

     

    Problem Six:[SPOJ PGCD/BZOJ2820YY的GCD(多组)]

    求gcd(i, j)是质数, 1 ≤ i ≤ a, 1 ≤ j ≤ b 的对数

     

    可以枚举质数后问题转换为Problem Five。对于单个询问,复杂度O(N)

    对于多组数据,按枚举质数的思路,结合Problem Five

    Ans=sigma[ sigma(u(d)*(N/(pd))*(N/(pd))) 1 ≤ d≤ n] p为质数

    将p作为变量,令T=pd,Ans=sigma[(N/T)*(M/T)*sigma(u(T/p)) ,p为质数且p|T

    将里面的求和提出:记G(x)=sigma(u(x/p),p为质数且p|x.

    问题的关键在于求解G(x),如果我们能将G(x)一一求出,则只需套用Problem Five相对Problem One的推广形式,预处理G(x)前缀和,使得询问复杂度为O(sqrt(N))

    我们通过u函数的定义和一些性质,可以得到如下这么一个非常有用的结论:

    若p|x则g(px)=u(x),否则g(px)=u(x)-g(x)。这两种情况正好对应了线性筛法的两种情况(实质是是否有平方因子)。于是,我们可以用线性筛法O(N)预处理求出G。

    本题的亮点在于虽然G(N)函数不满足积性,但我们可以通过线性筛法算出G(N)来。

    至此,问题得到了完美解决。

     

     

    Problem Seven:[NOI 2010 能量采集]sigma(gcd(i, j)), i ≤ a, j ≤ b

    F(x)表示gcd(i,j)==x的对数,根据容斥原理:F(x)=(a/x)*(b/x)-sigma(F(i*x),imin(a,b)/x).然后倒推即可。

     

     

     

    Problem Eight:[Crash的数字表格/BZOJ2693 jzptab(多组)]

    sigma(lcm(i, j)) ,i ≤ a, j ≤ b

     

    一步步推导:

    wps_clip_image-31785[6]

    推导的关键在最后两步,可以发现,我们将倒数第二步里的d提出与d结合后,可以把外面d消掉了(也正是本题的特殊之处),那么我们化简后只要一共枚举两个变量就行了。

    推到这一步,我们发现求和式就是Problem One和Problem Five的结合,可以直接套用解决,单个询问复杂度为O(N)。但多组无疑会TLE。

     

    再推一步?

    wps_clip_image-4808[6]

    记G(x)=x*sigma(d*u(d),d|x),因为可证G(x)是积性的,所以我们可以在O(N)的时间内算出G(x)。然后和Problem Six一样,只需套用Problem Five的推广形式,预处理G(x)前缀和,使得询问复杂度为O(sqrt(N))

    至此,问题得到了完美解决。

     

     

    Problem Nine:[BZOJ2694LCM]:

    sigma(lcm(i, j)),i ≤ a, j ≤ b,gcd(i,j)为free-squares.(所有质因子的次数<=1)

     

    从题目给出的条件入手,为了方便解决问题,我们可以设一个函数F(n)。

    F(n)=1/n 当n为free-squares;否则为0。

    这样我们发现,其实wps_clip_image-27747[6],感觉简化了很多。

    不难发现F(n)是积性的,我们再令t(n)=sigma(u(i)*F(n/i),i|n)。这有什么用?我们可以用反演的方法把F(n)表示出来时答案更容易求解:F(n)=sigma(t(i),i|n)。那么我们可以发现F(gcd(i,j))实际上变成了这么一个东西:F(gcd(i,j))=sigma(t(d),d|id|j)。我们再整理一下就是:wps_clip_image-5203[6]。我们记G(x)=x*x*sigma(u(i)*F(x/i),i|x)。不难发现G(x)积性的,所以所以我们可以在O(N)的时间内算出G(x)。和Problem Eight一样预处理G(x)前缀和,使得询问复杂度为O(sqrt(N))

    至此,问题得到了完美解决。

     

     

     

    Problem Ten:[BZOJ2627 JZPKIL(顾昱洲)]

    给定x,y,n,求Sigma(gcd(i,n)^x*lcm(i,n)^y),i ≤ n

     

    必须还不会。

  • 相关阅读:
    40 宾语从句的连词
    unar解压rar,zip等文件
    Disable beep in WSL terminal on Windows 10 [closed]
    Collins COBUILD Advanced Learner’s Dictionary (Collins COBUILD Dictionaries for Learners)
    中小学语文示范诵读库
    自己打印标准五笔字型教材(86)
    赵元任《施氏食狮史》
    西班牙语学习资源
    为什么“能”?为什么“行”?为什么“好”?答案在这里!
    社会主义好
  • 原文地址:https://www.cnblogs.com/oldmanren/p/2784986.html
Copyright © 2011-2022 走看看