【数论】
已知 f 0 ( x ) = ∑ k = 0 x ( − 1 ) k ⋅ 2 2 x − 2 k ⋅ C 2 x − k + 1 k f_0(x)=\sum\limits_{k=0}^x(-1)^k\cdot 2^{2x-2k}\cdot\text C_{2x-k+1}^k f0(x)=k=0∑x(−1)k⋅22x−2k⋅C2x−k+1k,且对于 n ≥ 1 n\ge1 n≥1,有 f n ( x ) = f 0 ( f n − 1 ( x ) ) f_n(x)=f_0(f_{n-1}(x)) fn(x)=f0(fn−1(x))。
T ( 1 ≤ T ≤ 1 0 3 ) T\ (1\le T\le 10^3) T (1≤T≤103) 组数据,给定 n , x ( 1 ≤ n , x ≤ 1 0 12 ) n,x\ (1\le n,x\le 10^{12}) n,x (1≤n,x≤1012),求 φ ( f n ( x ) ) \varphi(f_n(x)) φ(fn(x))。
建议改为:【模板】求 φ ( x ) \varphi(x) φ(x)。
先证 f ( x ) = x + 1 f(x)=x+1 f(x)=x+1(这里 f f f 默认指 f 0 f_0 f0):
【证明】 首先,
f ( n ) = ∑ k = 0 n ( − 1 ) k ⋅ 2 2 n − 2 k ⋅ C 2 n − k + 1 k = ∑ k = 0 n ( − 1 ) k ⋅ 2 2 n − 2 k ⋅ ( C 2 n − k k + C 2 n − k k − 1 ) = ∑ k = 0 n ( − 1 ) k ⋅ 2 2 n − 2 k ⋅ C 2 n − k k − ∑ k = 0 n − 1 ( − 1 ) k ⋅ 2 2 ( n − 1 ) − 2 k ⋅ C 2 ( n − 1 ) − k + 1 k = ∑ k = 0 n ( − 1 ) k ⋅ 2 2 n − 2 k ⋅ C 2 n − k k − f ( n − 1 ) = g ( n ) − f ( n − 1 ) \begin{aligned} f(n)&=\sum\limits_{k=0}^n(-1)^k\cdot 2^{2n-2k}\cdot\text C_{2n-k+1}^k\\&=\sum\limits_{k=0}^n(-1)^k\cdot 2^{2n-2k}\cdot\left(\text C_{2n-k}^k+\text C_{2n-k}^{k-1}\right)\\&=\sum\limits_{k=0}^n(-1)^k\cdot 2^{2n-2k}\cdot\text C_{2n-k}^k-\sum\limits_{k=0}^{n-1}(-1)^k\cdot 2^{2(n-1)-2k}\cdot\text C_{2(n-1)-k+1}^{k}\\&=\sum\limits_{k=0}^n(-1)^k\cdot 2^{2n-2k}\cdot\text C_{2n-k}^k-f(n-1)\\&=g(n)-f(n-1) \end{aligned} f(n)=k=0∑n(−1)k⋅22n−2k⋅C2n−k+1k=k=0∑n(−1)k⋅22n−2k⋅(C2n−kk+C2n−kk−1)=k=0∑n(−1)k⋅22n−2k⋅C2n−kk−k=0∑n−1(−1)k⋅22(n−1)−2k⋅C2(n−1)−k+1k=k=0∑n(−1)k⋅22n−2k⋅C2n−kk−f(n−1)=g(n)−f(n−1)
另外,下面的关键问题是研究 g ( n ) g(n) g(n),即
g ( n ) = 2 2 n + ∑ k = 1 n − 1 ( − 1 ) k ⋅ 2 2 n − 2 k ⋅ ( C 2 n − k − 1 k + C 2 n − k − 1 k − 1 ) + ( − 1 ) n = ∑ k = 0 n − 1 ( − 1 ) k ⋅ 2 2 n − 2 k ⋅ C 2 n − k − 1 k + ∑ k = 1 n ( − 1 ) k ⋅ 2 2 n − 2 k ⋅ C 2 n − k − 1 k − 1 = 4 ∑ k = 0 n − 1 ( − 1 ) k ⋅ 2 2 ( n − 1 ) − 2 k ⋅ C 2 n − k − 1 k − ∑ k = 0 n − 1 ( − 1 ) k ⋅ 2 2 ( n − 1 ) − 2 k ⋅ C 2 ( n − 1 ) − k k = 4 f ( n − 1 ) − g ( n − 1 ) \begin{aligned} g(n)&=2^{2n}+\sum\limits_{k=1}^{n-1}(-1)^k\cdot 2^{2n-2k}\cdot\left(\text C_{2n-k-1}^k+\text C_{2n-k-1}^{k-1}\right)+(-1)^n\\&=\sum_{k=0}^{n-1}(-1)^k\cdot 2^{2n-2k}\cdot\text C_{2n-k-1}^k+\sum_{k=1}^n(-1)^k\cdot 2^{2n-2k}\cdot\text C_{2n-k-1}^{k-1}\\&=4\sum_{k=0}^{n-1}(-1)^k\cdot 2^{2(n-1)-2k}\cdot\text C_{2n-k-1}^k-\sum_{k=0}^{n-1}(-1)^k\cdot 2^{2(n-1)-2k}\cdot\text C_{2(n-1)-k}^{k}\\&=4f(n-1)-g(n-1) \end{aligned} g(n)=22n+k=1∑n−1(−1)k⋅22n−2k⋅(C2n−k−1k+C2n−k−1k−1)+(−1)n=k=0∑n−1(−1)k⋅22n−2k⋅C2n−k−1k+k=1∑n(−1)k⋅22n−2k⋅C2n−k−1k−1=4k=0∑n−1(−1)k⋅22(n−1)−2k⋅C2n−k−1k−k=0∑n−1(−1)k⋅22(n−1)−2k⋅C2(n−1)−kk=4f(n−1)−g(n−1)
联立上述两式,易得 f ( x ) − f ( x − 1 ) = C f(x)-f(x-1)=C f(x)−f(x−1)=C(常数)。
考虑到 f ( 0 ) = 1 , f ( 1 ) = 2 f(0)=1,f(1)=2 f(0)=1,f(1)=2,所以 f ( x ) = x + 1 f(x)=x+1 f(x)=x+1,证毕。
所以 f n ( x ) = x + n + 1 f_n(x)=x+n+1 fn(x)=x+n+1。
直接求就可以了,理论复杂度 O ( T x ) O(T\sqrt{x}) O(Tx),实际上跑不满。
#include <cstdio>
#include <algorithm>
#include <cstring>
#define N 1000010
#define ll long long
using namespace std;
inline ll rd(){
char c;
bool flag = false;
while((c = getchar()) < '0' || c > '9')
if(c == '-') flag = true;
ll res = c - '0';
while((c = getchar()) >= '0' && c <= '9')
res = (res << 3) + (res << 1) + c - '0';
return flag ? -res : res;
}
inline ll phi(ll n) {
ll ans = n;
for(ll i = 2 ; i * i <= n ; 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;
}
ll x, n;
int main(){
while(~scanf("%lld%lld", &x, &n))
printf("%lld\n", phi(x + n + 1));
return 0;
}