【数论】
已知 f0(x)=∑k=0x(−1)k⋅22x−2k⋅C2x−k+1kf_0(x)=\sum\limits_{k=0}^x(-1)^k\cdot 2^{2x-2k}\cdot\text C_{2x-k+1}^kf0(x)=k=0∑x(−1)k⋅22x−2k⋅C2x−k+1k,且对于 n≥1n\ge1n≥1,有 fn(x)=f0(fn−1(x))f_n(x)=f_0(f_{n-1}(x))fn(x)=f0(fn−1(x))。
T (1≤T≤103)T\ (1\le T\le 10^3)T (1≤T≤103) 组数据,给定 n,x (1≤n,x≤1012)n,x\ (1\le n,x\le 10^{12})n,x (1≤n,x≤1012),求 φ(fn(x))\varphi(f_n(x))φ(fn(x))。
建议改为:【模板】求 φ(x)\varphi(x)φ(x)。
先证 f(x)=x+1f(x)=x+1f(x)=x+1(这里 fff 默认指 f0f_0f0):
【证明】 首先,
f(n)=∑k=0n(−1)k⋅22n−2k⋅C2n−k+1k=∑k=0n(−1)k⋅22n−2k⋅(C2n−kk+C2n−kk−1)=∑k=0n(−1)k⋅22n−2k⋅C2n−kk−∑k=0n−1(−1)k⋅22(n−1)−2k⋅C2(n−1)−k+1k=∑k=0n(−1)k⋅22n−2k⋅C2n−kk−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)=22n+∑k=1n−1(−1)k⋅22n−2k⋅(C2n−k−1k+C2n−k−1k−1)+(−1)n=∑k=0n−1(−1)k⋅22n−2k⋅C2n−k−1k+∑k=1n(−1)k⋅22n−2k⋅C2n−k−1k−1=4∑k=0n−1(−1)k⋅22(n−1)−2k⋅C2n−k−1k−∑k=0n−1(−1)k⋅22(n−1)−2k⋅C2(n−1)−kk=4f(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)=Cf(x)-f(x-1)=Cf(x)−f(x−1)=C(常数)。
考虑到 f(0)=1,f(1)=2f(0)=1,f(1)=2f(0)=1,f(1)=2,所以 f(x)=x+1f(x)=x+1f(x)=x+1,证毕。
所以 fn(x)=x+n+1f_n(x)=x+n+1fn(x)=x+n+1。
直接求就可以了,理论复杂度 O(Tx)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;
}
文章讨论了一个关于数论的递归函数(f_n(x)),证明了(f(x)=x+1),并给出了计算(varphi(f_n(x)))的方法,其中(varphi)是欧拉函数。通过递推关系简化了计算过程,最后提供了一个C++代码片段用于求解给定输入的欧拉函数值。
2346





