You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求编写计算≤n且素因子均≤k的正整数个数的函数

嘿,这个问题我帮你梳理清楚,咱们一步步来实现这个函数!

首先,先明确问题的核心要求:

我们需要统计1到n之间,所有素因子全部≤k的正整数的个数,注意1无论如何都要算进去。比如你举的例子k=4、n=10,符合条件的数是1、2、3、4、6、8、9,一共7个,完全正确。

解决思路拆解

要解决这个问题,我们可以分成两个关键步骤:

  1. 先找出所有≤k的素数(因为我们只关心由这些素数组合出来的数);
  2. 生成所有由这些素数(包括它们的幂次)组合而成、且≤n的数,再加上1,统计总数即可。

具体实现(Python示例)

第一步:筛出≤k的素数

我们用经典的埃拉托斯特尼筛法来快速生成k以内的素数:

def sieve_primes(max_p):
    if max_p < 2:
        return []
    # 初始化筛子,默认所有数都是素数
    sieve = [True] * (max_p + 1)
    sieve[0] = sieve[1] = False  # 0和1不是素数
    for i in range(2, int(max_p ** 0.5) + 1):
        if sieve[i]:  # 如果i是素数,标记它的所有倍数为非素数
            sieve[i*i : max_p+1 : i] = [False] * len(sieve[i*i : max_p+1 : i])
    # 收集所有素数
    primes = [i for i, is_prime in enumerate(sieve) if is_prime]
    return primes

第二步:生成所有符合条件的数并计数

我们用集合来存储符合条件的数(避免重复,比如6=2×3和3×2是同一个数),然后逐个处理每个素数,生成它的所有幂次组合:

def count_valid_numbers(n, k):
    if n < 1:
        return 0  # 没有正整数符合条件
    
    # 先处理特殊情况:k >= n时,所有1~n的数都符合条件
    if k >= n:
        return n
    
    # 获取所有<=k的素数
    primes = sieve_primes(k)
    
    # 初始化集合,先把1加进去
    valid_numbers = {1}
    
    # 遍历每个素数,生成所有可能的乘积组合
    for p in primes:
        temp_set = set()
        for num in valid_numbers:
            current = num * p
            # 不断乘以p,直到超过n为止
            while current <= n:
                temp_set.add(current)
                current *= p
        # 把新生成的数加入总集合
        valid_numbers.update(temp_set)
    
    # 返回集合的大小,就是符合条件的数的个数
    return len(valid_numbers)

测试验证

咱们用你给的例子测试一下:

print(count_valid_numbers(10, 4))  # 输出7,和预期一致

再测几个边界情况:

  • count_valid_numbers(5, 1):返回1(只有1符合)
  • count_valid_numbers(10, 10):返回10(所有1~10的数都符合)
  • count_valid_numbers(1, 5):返回1(只有1)

为什么这个方法有效?

这个方法的核心是枚举所有由≤k的素数构成的数:

  • 从1开始,每个素数p可以和已有的数相乘,生成p的一次方、二次方...直到超过n;
  • 用集合存储可以自动去重,避免重复计算不同顺序的乘积(比如2×3和3×2);
  • 最后集合的大小就是所有符合条件的数的总数。

这个方法在k较小的时候效率很高,因为生成的符合条件的数的数量远小于n;如果k很大(比如接近n),我们直接返回n即可,不需要额外计算。

内容的提问来源于stack exchange,提问作者TosinAl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:43:10