我想得到不是理想平方的数字,而是输入数字的因素,我在这里面临的问题是假设我们输入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]
答案 0 :(得分:0)
您可以用不同的方式解决相同的问题:
写一个函数来计算t =数字的因数。factors(x)
写另一个函数来确定数字或其因子是否为完美平方:perfc_sqr(x)
最后编写一个返回完美平方自由因子的函数:
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)