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

deikduxw  于 2022-12-05  发布在  Python
关注(0)|答案(2)|浏览(200)

我想得到的不是完美平方的数,是输入数的因子,我现在面临的问题是,假设我们给予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的因子为:72的因子为:[第二、三、六、八、十二、十八、二十四、七十二条]

kcrjzv8t

kcrjzv8t1#

你可以用不同的方法来解决同样的问题:
1.写一个函数来计算t= factors(x)的因子
1.写出另一个函数来确定一个数或它的因子是否是完全平方:perfc_sqr(x)
1.最后写一个函数返回完全平方因子:

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]
o7jaxewo

o7jaxewo2#

我使用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)

相关问题