python超简单求因数的方法,无需复杂算法,不到10行代码就能搞定!

时间:2024-10-05 11:46:17

首先,什么是因数

因数是指整数a除以整数b(b≠0) 的商正好是整数而没有余数,我们就说b是a的因数。

从因数的定义上来看,因数的主要求法,就是除法,看结果是否为整数。

但是在python中,除法会返回为float,而float转int会被抹零,这就导致我们无法用除法的方式来求因数

type10/2
  • 1
<class 'float'>
  • 1

既然,我们无法用除法的方式来求因数

换个思路

那么为什么不用乘法呢?

在python中,乘法运算的返回值,是int,这样问题不就完美解决了么~

type5*2
  • 1
<class 'int'>
  • 1

首先,我们生成一个列表,用来遍历从1开始到我们要求数字的因数,以10为例,因为我们要取到10,并且从1开始,故列表这样写

list1 = [i for i in range(1, 11)]
  • 1

这样就能得到一个1-10的列表

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  • 1

接下来,我们需要一个反序的列表,也很简单

list2 = list1[::-1]
  • 1

这样就得到了一个反序的列表

[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
  • 1

我们还要生成一个空列表,用来保存我们得到的数据

list3 = []
  • 1

接下来,我们的目的是要让列表1的每一个数字,和列表2中的每一个数字相乘,然后判断所得值是否为10即可,是的话,就是我们需要的值,将所得的值保存到我们之前建立的空列表即可。

for a in list1:
    for b in list2:
        if a * b == 10:
            list3.append(a)
  • 1
  • 2
  • 3
  • 4

利用循环嵌套,完美解决这一问题。

最后,完整运代码:

list1 = [i for i in range(1, 11)]
list2 = list1[::-1]
list3 = []
for a in list1:
    for b in list2:
        if a * b == 10:
            list3.append(a)
print(f'10的因数有:{list3}')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

输出结果:

10的因数有:[1, 2, 5, 10]
  • 1

8行代码,大功告成~

接下来,我们简单的升级一下需求, 要求任意数字的因数,再加上计数。

想求任意数字的因数,只需要增加一个接口,输入就可以了。

在首行代码,增加输入接口:

x = input('请输入你想求的数字:')
  • 1

然后,把x的值传给列表1的推导式

list1 = [i for i in range(1, int(x)+1)]
  • 1

注意:input的默认函数类型为str,故需要转换成int类型。

接下来的步骤都差不多了,只需要再增加一个计数器就好了。

x = input('请输入你想求的数字')
list1 = [i for i in range(1, int(x)+1)]
list2 = list1[::-1]
list3 = []
count = 0
for a in list1:
    for b in list2:
        if a * b == int(x):
            list3.append(a)
            count += 1
print(f'{x}的因数有{list3},共有{count}个')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

测试:

请输入你想求的数字:45
45的因数有[1, 3, 5, 9, 15, 45],共有6
  • 1
  • 2

完美~