题意:定义函数f(n),f(1)=1,f(n)=|{(x,y)|x+y=n,x≥1,y≥1,gcd(x,y)=1}|(n>1)。定义函数g(n),g(n)=Σf(n/d)(求和对n的全体约数d进行)。递归地定义函数F_k(n),F_1(n)=f(g(n)),F_k(n)=g(F_k-1(n))(k>1且k为偶数),F_k(n)=f(F_k-1(n))(k>1且k为奇数)。求F_k(n)%(1e9+7)的值。
分析:简单的数学题。注意到f(n)=phi(n),g(n)=n,故F_k(n)=phi(...phi(n))(求(k+1)/2次phi)。其中phi(n)为欧拉函数。
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn=1e6+10,mo=1e9+7;
LL phi(LL n)
{
LL m=(LL)sqrt(n+0.5),ans=n;
for (int i=2;i<=m;i++)
if (n%i==0)
{
ans=ans/i*(i-1);
while (n%i==0) n/=i;
}
if (n>1) ans=ans/n*(n-1);
return ans;
}
int main()
{
LL n,k;
cin>>n>>k;k=(k+1)/2;
while (k--&&n!=1) n=phi(n);
cout<<n%mo;
return 0;
}