题解:CF776E The Holmes Children
这道题就是究极无敌诈骗题,实际上看懂了非常简单。
考虑
原来
考虑
所以
所以:
-
k=1$ 时,$F_k(n)=\varphi(n) -
k$ 为偶数时,$F_k(n)=F_{k-1}(n) -
k$ 为奇数时,$F_k(n)=\varphi(F_{k-1}(n))=\varphi(F_{k-2}(n))
所以这就变成了给定
但是
所以
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e6+10;
bool f[N];
int p[N], n, k;
void get() {
f[1] = 1;
for (int i = 2; i < N; i++) {
if (!f[i])
p[++p[0]] = i;
for (int j = 1; j <= p[0] && i * p[j] < N; j++) {
f[i * p[j]] = 1;
if (i % p[j] == 0)
break;
}
}
}
int phi(int x) {
int ans = x;
for (int i = 1; i <= p[0] && p[i]*p[i] <= x; i++) {
if (x % p[i])
continue;
ans = ans / p[i] * (p[i] - 1);
while (x % p[i] == 0)
x /= p[i];
}
if (x > 1)
ans = ans / x * (x - 1);
return ans;
}
signed main() {
get();
cin >> n >> k;
for (int i = 1; i <= (k + 1) / 2 && n > 1; i++)
n = phi(n);
cout << n % 1000000007 << endl;
return 0;
}