解题思路
化简 :
因此 就是欧拉函数,而 是 的和函数,即 :
证明:考虑 个分数 。将它们化为最简分数,得到 个新的分数 ,其中 是 的约数且 与 互质。显然分母为 的分数有 个。因此化简后的不同分数总数为 。
将 和 代入 并化简:
将 打表:
| 实际函数 | 嵌套次数 | |
|---|---|---|
不难发现, 就是对 嵌套 次 。
经过若干次嵌套后会重复 ,所以当 变为 后可以跳过后面的嵌套,实际嵌套次数为 级别。
参考代码
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
const int mod=1e9+7;
ll phi(ll n)
{
ll res=n;
for(ll i=2;i*i<=n;i++)
{
if(n%i==0)
{
res=res/i*(i-1);
while(n%i==0)n/=i;
}
}
if(n>1)res=res/n*(n-1);
return res;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
ll n,k;
cin>>n>>k;
k=k+1>>1;
while(k--&&n>1)n=phi(n);
cout<<n%mod<<'\n';
return 0;
}