📜  给定数字的非质数除数的计数(1)

📅  最后修改于: 2023-12-03 15:27:35.132000             🧑  作者: Mango

题目介绍

给定一个数字,编写一个程序来计算它的非质数除数数量。

解题思路

首先,我们需要了解什么是质数和非质数:

质数(也叫素数)是指除了1和它本身以外,不能被其他整数整除的数,比如2、3、5、7、11、13等。

非质数则是指除了1和它本身以外,能被其他整数整除的数,比如4、6、8、9、10等。

因此,求给定数字的非质数除数数量,我们只需要遍历数字的除数,判断除数是否是质数,如果不是,则计数器加一即可。

判断一个数是否是质数,可以使用以下方法:

  1. 从2到n-1遍历,如果可以被整除,则说明不是质数;
  2. 判断一个数是否是质数只需要判断到它的平方根即可,因为如果该数存在非质因子,则其中的一个因子一定小于等于它的平方根,而另一个大于它的平方根。

代码实现

import math

def is_prime(n):
    if n < 2:
        return False
    for i in range(2, int(math.sqrt(n))+1):
        if n % i == 0:
            return False
    return True

def non_prime_divisors(n):
    count = 0
    for i in range(2, n//2+1):
        if n % i == 0 and not is_prime(i):
            count += 1
    return count

使用示例

>>>non_prime_divisors(15)
2
>>>non_prime_divisors(22)
2
>>>non_prime_divisors(100)
4

结论

以上就是本题的解题思路和代码实现,并通过示例验证了代码的正确性。题目难度较低,适合初学者进行练习。