2024江苏省大学生程序设计大赛(JSCPC)热身赛题解(B)

题目大意:

求区间 [ 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)=y1,易证 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(1p11)(1p21)...(1pk1)=p1p2...pkn(p11)(p21)...(pk1),其中 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,...

  1. n n n的质因数中包含 ≥ 5 \ge5 5的数时,设该数为 m m m,则 m − 1 m - 1 m1一定是一个合数(因为这个范围内的质数一定都是奇数,且每两个质数之差 ≥ 2 \ge2 2),故 n n n的欧拉函数不是质数。

  2. 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 (31)=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 (31)=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';
}
  • 24
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值