python完美平方免费数字及其因子

时间:2018-08-09 18:02:06

标签: python-3.x factors square-root

我想得到不是理想平方的数字,而是输入数字的因素,我在这里面临的问题是假设我们输入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,8,12,18,24,72]

2 个答案:

答案 0 :(得分:0)

您可以用不同的方式解决相同的问题:

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

  2. 写另一个函数来确定数字或其因子是否为完美平方:perfc_sqr(x)

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

    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]
    

答案 1 :(得分:0)

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