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

     

    必须还不会。

  • 相关阅读:
    LeetCode 121. Best Time to Buy and Sell Stock
    LeetCode 221. Maximal Square
    LeetCode 152. Maximum Product Subarray
    LeetCode 53. Maximum Subarray
    LeetCode 91. Decode Ways
    LeetCode 64. Minimum Path Sum
    LeetCode 264. Ugly Number II
    LeetCode 263. Ugly Number
    LeetCode 50. Pow(x, n)
    LeetCode 279. Perfect Squares
  • 原文地址:https://www.cnblogs.com/oldmanren/p/2784986.html
Copyright © 2011-2022 走看看