【问题标题】:Python - count the number of prime divisors without using rangePython - 在不使用范围的情况下计算素数除数的数量
【发布时间】:2020-02-07 02:30:39
【问题描述】:

我必须编写一个函数来计算给定正整数 n 的素数除数的总数。由于我一周前刚开始学习python,所以我不允许使用for循环和范围。以下是我目前所拥有的:

def count_prime_divisors(n):
    return num_of_divisors(n, 1)

def num_of_divisors(n, i):
    if i > n:
        return 0
    if n % i == 0 and num_of_divisors(i, 1) == 2:
        return 1 + num_of_divisors(n, i+1)
    else:
        return num_of_divisors(n, i+1)

所以我知道超出最大递归深度错误发生在这一行if n % i == 0 and num_of_divisors(i, 1) == 2,但我不知道如何检查除数是否为素数,以便函数可以正常工作。也许我应该写另一个辅助函数?有人可以帮我弄这个吗?非常感谢任何帮助:(谢谢!

【问题讨论】:

  • 素数唯一数的素数数你要数吗?
  • 不允许使用range 或一般循环吗?
  • 我必须计算唯一素数除数的数量
  • @Euripus 检查我发布的答案。

标签: python recursion


【解决方案1】:

你可以试试这个。

def prime_fac(n,count=0,prime_num=2):
    if n==1:
        print('Number of prime factors',count)
        return
    elif n%prime_num==0:
        print(prime_num)
        return prime_fac(n//prime_num,count+1,prime_num)
    else:
        return prime_fac(n,count,prime_num+1)

prime_fac(100)
prime_fac(12)
prime_fac(999)

输出

2
2
5
5
Number of prime factors 4
2
2
3
Number of prime factors 3
3
3
3
37
Number of prime factors 4

如果想存储 count 的质因数和 独特的质因数,请使用它。

def prime_fac(n,count=0,prime_num=2,prime_set=set()):
    if n==1:
        print('Number of prime factors',count)
        return count,prime_set
    elif n%prime_num==0:
        print(prime_num)
        prime_set=prime_set|{prime_num}  #set union operation
        return prime_fac(n//prime_num,count+1,prime_num,prime_set)
    else:
        return prime_fac(n,count,prime_num+1,prime_set)

a=prime_fac(100)
print(a)

输出

2
2
5
5
Number of prime factors 4

(4, {2, 5}) #a looks like this where 4 is prime factors count and {2,5} is unique prime factors.

【讨论】:

    【解决方案2】:

    如果您使用的是 Linux,这应该可以工作(没有循环、没有范围、没有任何内容 =):

    >>> import os
    >>> 
    >>> def factor(num) :
    ...     output = os.popen( 'factor %d' % num ).read()
    ...     return map( int, output.split(':')[-1].split())
    ... 
    >>> print factor(128)
    [2, 2, 2, 2, 2, 2, 2]
    >>> 
    

    我希望你知道如何使用 len() 获取列表的长度

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-28
      • 1970-01-01
      • 2019-06-15
      • 1970-01-01
      • 2020-12-11
      • 2019-11-27
      • 1970-01-01
      • 2015-01-29
      相关资源
      最近更新 更多