python 完全平方自由数及其因数

python perfect square free numbers and its factors

我想得到不是完全平方数的数字,它们是输入数字的因数我在这里面临的问题是假设我们输入 72,所以 36 是完全平方数,但 12 不是,但是在 12 的因数中 4 是一个完全平方数所以现在不能数 12 我想得到没有完全平方数和没有完全平方数的数字 所以在 72 中只有 2,3 和 6 是完全平方自由数

我正在尝试的方法是找到因子,然后如果因子不是完全平方,则将其添加到另一个列表中,然后我想再次获取它们的因子,如果其中没有完全平方,则将它们添加到另一个列表中,然后打印出来 我得到了非完美平方因子,但我无法找到下一步的逻辑,即获取它们的因子并消除具有完美平方因子的人

def is_square(apositiveint):
    x = apositiveint // 2
    seen = set([x])
    while x * x != apositiveint:
        x = (x + (apositiveint // x)) // 2
        if x in seen:
            return False
        seen.add(x)
    return True


def print_factors(x):

    _list = []
    _list_1 = []
    _list_2 = []

    print("The factors of", x, "are:")
    for i in range(2, x + 1):
        if x % i == 0:
            if is_square(i) == False:
                _list.append(i)
            else:
                _list_1.append(i)
    return _list


num = int(input("Enter the number"))

_list_1 = []

_list_1 = print_factors(num)

number = []

for x in range(0, len(_list_1)):
    number = print_factors(_list_1[x])
    print(number)

输入

72

输出

72的因数是: 2的因数是: [2] 3的因数是: [3] 6的因数是: [2, 3, 6] 8的因数是: [2, 8] 12的因数是: [2, 3, 6, 12] 18的因数是: [2, 3, 6, 18] 24的因数是: [2, 3, 6, 8, 12, 24] 72的因数是: [2、3、6、8、12、18、24、72]

你可以用不同的方式解决同样的问题:

  1. 编写一个函数来计算 t=数字的因数。factors(x)

  2. 再写一个函数来判断一个数或其因数是否为完全平方数:perfc_sqr(x)

  3. 最后写一个returns完美平方自由因子的函数:

    import numpy as np
    def factors(x):
        nums =  np.arange(2,x+1)
        return nums[x % nums == 0]
    
    def perfc_sqr(x):
        pnum = np.sqrt(factors(x))[1:]
        return any(pnum== np.array(pnum,dtype="i"))
    
    def perfect_square_free(x):   
        return [i for i in factors(x) if not perfc_sqr(i)]
    perfect_square_free(72)
    [2, 3, 6]
    

我使用 sqrt(apositiveint).is_integer() 修改了我的代码,这让我更容易找到它是否是完美的正方形然后我修改了完整的函数以便如果数字是偶数它首先变成奇数然后测试它现在唯一的问题是 2 不在列表中但计数正确

def is_square(apositiveint):
    if apositiveint % 2 == 0:
        apositiveint = apositiveint / 2
    if apositiveint % 2 == 0:
        return True
    return sqrt(apositiveint).is_integer()

我添加修改了这个函数并放在程序中

from math import sqrt

def is_square(apositiveint):
    if apositiveint % 2 == 0:
        apositiveint = apositiveint / 2
    if apositiveint % 2 == 0:
        return True
    return sqrt(apositiveint).is_integer()

def print_factors(x):

    _list = []
    count = 0

    print("The factors of", x, "are:")
    for i in range(1, x + 1):
        if x % i == 0:
            if is_square(i) == False:
                _list.append(i)
                count += 1
    print(count + 1)
    return _list


num = int(input("Enter the number"))

_list_1 = []

_list_1 = print_factors(num)

number = []

for x in range(0, len(_list_1)):
    number = print_factors(_list_1[x])
    print(number)