题目大意:
求区间 [ l , r ] [l, r] [l,r]中有多少正整数满足 ϕ ( ϕ ( n ) ) = ϕ ( n ) − 1 \phi(\phi(n)) = \phi(n) - 1 ϕ(ϕ(n))=ϕ(n)−1,其中 ϕ \phi ϕ为欧拉函数。
解:
设 y = ϕ ( n ) y=\phi(n) y=ϕ(n),则上式变为 ϕ ( y ) = y − 1 \phi(y) = y - 1 ϕ(y)=y−1,易证 y y y为质数(注意 ϕ ( 1 ) = 1 \phi(1) = 1 ϕ(1)=1, 1 1 1与任何正整数都互质)。
故原问题转化为求 [ l , r ] [l, r] [l,r]中有多少个正整数v满足 ϕ ( v ) \phi(v) ϕ(v)为质数。
首先 1 1 1的欧拉函数是 1 1 1,不是质数。
考虑欧拉函数的公式 ϕ ( n ) = n ( 1 − 1 p 1 ) ( 1 − 1 p 2 ) ⋅ . . . ⋅ ( 1 − 1 p k ) = n p 1 p 2 ⋅ . . . ⋅ p k ( p 1 − 1 ) ( p 2 − 1 ) ⋅ . . . ⋅ ( p k − 1 ) \phi(n) = n(1-\frac{1}{p_1})(1-\frac{1}{p_2})\cdot...\cdot(1-\frac{1}{p_k})=\frac{n}{p_1p_2\cdot...\cdot p_k}(p_1-1)(p_2-1)\cdot...\cdot(p_k-1) ϕ(n)=n(1−p11)(1−p21)⋅...⋅(1−pk1)=p1p2⋅...⋅pkn(p1−1)(p2−1)⋅...⋅(pk−1),其中 p 1 , p 2 , … , p k p_1, p_2, \dots, p_k p1,p2,…,pk为 n n n的所有质因数。
注意到上式中 n p 1 p 2 ⋅ . . . ⋅ p k \frac{n}{p_1p_2\cdot...\cdot p_k} p1p2⋅...⋅pkn必定为一个正整数
观察质数 2 , 3 , 5 , 7 , 9 , 11 , 13 , . . . 2, 3, 5, 7, 9, 11, 13, ... 2,3,5,7,9,11,13,...
-
若 n n n的质因数中包含 ≥ 5 \ge5 ≥5的数时,设该数为 m m m,则 m − 1 m - 1 m−1一定是一个合数(因为这个范围内的质数一定都是奇数,且每两个质数之差 ≥ 2 \ge2 ≥2),故 n n n的欧拉函数不是质数。
-
若 n n n的质因数只有 2 2 2或 3 3 3,设 n = 2 a 3 b n = 2^a 3^b n=2a3b,
- 若 b > 1 b>1 b>1,则 n p 1 p 2 ⋅ . . . ⋅ p k \frac{n}{p_1p_2\cdot...\cdot p_k} p1p2⋅...⋅pkn一定是3的倍数,且 ( 3 − 1 ) = 2 (3 - 1) = 2 (3−1)=2同时又是右边的因子,故 n n n的欧拉函数一定是合数,不是质数( n n n是 2 × 3 2\times 3 2×3的倍数)。
- 若 b = 0 b=0 b=0,则 ϕ ( n ) = n 2 \phi(n)=\frac{n}{2} ϕ(n)=2n,只有当 a = 2 a=2 a=2时 n n n的欧拉函数是质数。
- 若
b
=
1
b=1
b=1,
- 若 a > 1 a>1 a>1,则 n p 1 p 2 ⋅ . . . ⋅ p k \frac{n}{p_1p_2\cdot...\cdot p_k} p1p2⋅...⋅pkn一定是2的倍数,且 ( 3 − 1 ) = 2 (3 - 1) = 2 (3−1)=2同时又是右边的因子,故 n n n的欧拉函数一定是合数,不是质数。
接下来讨论 a = 0 a=0 a=0和 a = 1 a=1 a=1,最后总结得出欧拉函数为质数的正整数只有 3 , 4 , 6 3, 4, 6 3,4,6。
int l, r;
// 返回0~x中欧拉函数是质数的数的个数
int ans(int x) {
if (x >= 6) return 3;
if (x >= 4) return 2;
if (x >= 3) return 1;
return 0;
}
void solve() {
cout << ans(r) - ans(l - 1) << '\n';
}