DestinHistoire

 

CF776E The Holmes Children(欧拉函数+狄利克雷卷积)

题目描述

  \(f(1)=1,f(n)=\displaystyle\sum_{i=1}^{n}[\gcd(i,n-i)=1](n\geq 2)\),\(g(n)=\displaystyle\sum_{d\mid n}f(\frac{n}{d})\)。

\[F_k(n)=\begin{cases}f(g(n))&k=1\\ g(F_{k-1}(n))&k>1\&\&k\mod 2=0\\ f(F_{k-1}(n))&k>1\&\&k\mod 2=1 \end{cases} \]

  其中 \(1\leq n\leq 10^{12},1\leq k\leq 10^{12}\),求 \(F_k(n)\),答案对 \(10^9+7\) 取模。

分析

  首先:

\[\gcd(i,n-i)=\gcd((n-i)\%i,i)=\gcd(n\% i,i)=\gcd(i,n) \]

  所以

\[\begin{aligned}&f(n)\\ =&\sum_{i=1}^{n}[\gcd(i,n-i)=1]\\ =&\sum_{i=1}^{n}[\gcd(i,n)=1]\\ =&\varphi(n) \end{aligned} \]

\[\begin{aligned} &g(n)\\ =&\sum_{d\mid n}\varphi(\frac{n}{d})\\ =&\sum_{d\mid n}\varphi(\frac{n}{d})·1\\ \end{aligned} \]

  由于 \(\varphi \ast I=\mathbf{id}\),所以 \(g(n)=n\)。

\[F_k(n)=\begin{cases}\varphi(n)&k=1\\ F_{k-1}(n)&k>1\&\&k\mod 2=0\\ \varphi(F_{k-1}(n))&k>1\&\&k\mod 2=1 \end{cases} \]

  可以发现 \(F_k(n)\) 的值就是对 \(n\) 求 \(\lfloor\frac{k+1}{2}\rfloor\) 次欧拉函数。但是 \(k\) 的值很大,不可能真的求 \(\lfloor\frac{k+1}{2}\rfloor\) 次,由于 \(n\) 求 \(O(\log n)\) 次欧拉函数的值就是 \(1\),此时再求欧拉函数就没有意义了,所以求 \(\max(\log n,\lfloor\frac{k+1}{2}\rfloor)\) 即可。

代码

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
const int mod=1e9+7;
int prime[N+10],vis[N+10],cnt;
void init()
{
    for(int i=2;i<=N;i++)
    {
        if(!vis[i])
            prime[++cnt]=i;
        for(int j=1;i*prime[j]<=N&&j<=cnt;j++)
        {
            vis[i*prime[j]]=1;
            if(i%prime[j]==0)
                break;
        }
    }
}
long long phi(long long n)
{
    long long ans=n;
    for(int i=1;i<=cnt&&1LL*prime[i]*prime[i]<=n;i++)
    {
        if(n%prime[i])
            continue;
        ans=ans/prime[i]*(prime[i]-1);
        while(n%prime[i]==0)
            n=n/prime[i];
    }
    if(n>1)
        ans=ans/n*(n-1);
    return ans;
}
int main()
{
    init();
    long long n,k;
    scanf("%lld%lld",&n,&k);k=(k+1)/2;
    for(long long i=1;i<=k&&n>1;i++)
        n=phi(n);
    printf("%lld\n",n%mod);
    return 0;
}

posted on 2020-11-17 12:42  DestinHistoire  阅读(100)  评论(0)    收藏  举报

导航