#11869. Count Coprime Numbers / 统计互质数个数

Count Coprime Numbers / 统计互质数个数

Problem : Count Coprime Numbers / 统计互质数个数

任务总览表

任务名称 时间限制 内存限制 分数
Count Coprime Numbers / 统计互质数个数 1 秒 256 MB 100 分

题目描述

给定一个正整数 A,请计算在区间 [1, A] 内,有多少个整数与 A ​互质​。换句话说,统计满足 gcd(x, A) = 1 的整数 x 的个数,其中 1 <= x <= A。


输入格式

输入包含一个正整数 A,保证 1 <= A <= 1000000。


输出格式

输出一个整数,表示在区间 [1, A] 内与 A 互质的整数的个数。


样例输入 1

10

样例输出 1

4

解释​:在区间 [1, 10] 内,与 10 互质的数有 1, 3, 7, 9,共 4 个。


样例输入 2

12

样例输出 2

4

解释​:在区间 [1, 12] 内,与 12 互质的数有 1, 5, 7, 11,共 4 个。


提示

  • 两个数 xA互质​,意味着它们的最大公约数 gcd(x, A) = 1

  • 计算 1 到 A 之间与 A 互质的数的个数,等价于计算 ​**欧拉函数 φ(A)**​,即:

    φ(A) = A * (1 - 1/p1) * (1 - 1/p2) * ... * (1 - 1/pk)
    

    其中 p1, p2, ..., pk 是 A 的所有不同质因数。

  • 该值可以在 O(sqrt(A)) 时间内计算。


题目分析

目标​:求区间 [1, A] 内,与 A 互质的数的个数。 ​思路​:

  • 利用欧拉函数 φ(A) 计算与 A 互质的整数个数。
  • 先分解 A 的所有不同质因数,再使用公式计算 φ(A)。
  • 时间复杂度为 O(sqrt(A)),可以高效处理 A <= 1000000 的情况。

时间复杂度分析

  • 通过 O(sqrt(A)) 的方法计算欧拉函数 φ(A),可以快速得到答案。
  • 由于 A 最大为 1000000,该方法能在 1 秒内高效运行。

结论

  • 该问题利用了数论中的 互质性 概念,核心在于计算欧拉函数 φ(A)。
  • 通过数学推导,可以避免暴力遍历,优化计算复杂度至 O(sqrt(A))。