返回介绍

solution / 2400-2499 / 2427.Number of Common Factors / README

发布于 2024-06-17 01:03:06 字数 4401 浏览 0 评论 0 收藏 0

2427. 公因子的数目

English Version

题目描述

给你两个正整数 ab ,返回 ab 因子的数目。

如果 x 可以同时整除 ab ,则认为 xab 的一个 公因子

 

示例 1:

输入:a = 12, b = 6
输出:4
解释:12 和 6 的公因子是 1、2、3、6 。

示例 2:

输入:a = 25, b = 30
输出:2
解释:25 和 30 的公因子是 1、5 。

 

提示:

  • 1 <= a, b <= 1000

解法

方法一:枚举

我们可以先算出 $a$ 和 $b$ 的最大公约数 $g$,然后枚举 $[1,..g]$ 中的每个数,判断其是否是 $g$ 的因子,如果是,则答案加一。

时间复杂度 $O(\min(a, b))$,空间复杂度 $O(1)$。

class Solution:
  def commonFactors(self, a: int, b: int) -> int:
    g = gcd(a, b)
    return sum(g % x == 0 for x in range(1, g + 1))
class Solution {
  public int commonFactors(int a, int b) {
    int g = gcd(a, b);
    int ans = 0;
    for (int x = 1; x <= g; ++x) {
      if (g % x == 0) {
        ++ans;
      }
    }
    return ans;
  }

  private int gcd(int a, int b) {
    return b == 0 ? a : gcd(b, a % b);
  }
}
class Solution {
public:
  int commonFactors(int a, int b) {
    int g = gcd(a, b);
    int ans = 0;
    for (int x = 1; x <= g; ++x) {
      ans += g % x == 0;
    }
    return ans;
  }
};
func commonFactors(a int, b int) (ans int) {
  g := gcd(a, b)
  for x := 1; x <= g; x++ {
    if g%x == 0 {
      ans++
    }
  }
  return
}

func gcd(a int, b int) int {
  if b == 0 {
    return a
  }
  return gcd(b, a%b)
}
function commonFactors(a: number, b: number): number {
  const g = gcd(a, b);
  let ans = 0;
  for (let x = 1; x <= g; ++x) {
    if (g % x === 0) {
      ++ans;
    }
  }
  return ans;
}

function gcd(a: number, b: number): number {
  return b === 0 ? a : gcd(b, a % b);
}

方法二:枚举优化

与方法一类似,我们可以先算出 $a$ 和 $b$ 的最大公约数 $g$,然后枚举最大公约数 $g$ 的所有因子,累加答案。

时间复杂度 $O(\sqrt{\min(a, b)})$,空间复杂度 $O(1)$。

class Solution:
  def commonFactors(self, a: int, b: int) -> int:
    g = gcd(a, b)
    ans, x = 0, 1
    while x * x <= g:
      if g % x == 0:
        ans += 1
        ans += x * x < g
      x += 1
    return ans
class Solution {
  public int commonFactors(int a, int b) {
    int g = gcd(a, b);
    int ans = 0;
    for (int x = 1; x * x <= g; ++x) {
      if (g % x == 0) {
        ++ans;
        if (x * x < g) {
          ++ans;
        }
      }
    }
    return ans;
  }

  private int gcd(int a, int b) {
    return b == 0 ? a : gcd(b, a % b);
  }
}
class Solution {
public:
  int commonFactors(int a, int b) {
    int g = gcd(a, b);
    int ans = 0;
    for (int x = 1; x * x <= g; ++x) {
      if (g % x == 0) {
        ans++;
        ans += x * x < g;
      }
    }
    return ans;
  }
};
func commonFactors(a int, b int) (ans int) {
  g := gcd(a, b)
  for x := 1; x*x <= g; x++ {
    if g%x == 0 {
      ans++
      if x*x < g {
        ans++
      }
    }
  }
  return
}

func gcd(a int, b int) int {
  if b == 0 {
    return a
  }
  return gcd(b, a%b)
}
function commonFactors(a: number, b: number): number {
  const g = gcd(a, b);
  let ans = 0;
  for (let x = 1; x * x <= g; ++x) {
    if (g % x === 0) {
      ++ans;
      if (x * x < g) {
        ++ans;
      }
    }
  }
  return ans;
}

function gcd(a: number, b: number): number {
  return b === 0 ? a : gcd(b, a % b);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文