这道Python怎么做?

Python022

这道Python怎么做?,第1张

代码如下(排序使用了Python内置函数sorted() ):

Python代码

# 从键盘接受一组数据 存入列表num_list

num_list = input('输入:').split(' ')

# 把接收到的数据从文本转换到数字并排序

num_list = sorted(list(map(int, num_list)))

# 打印排序后的列表

print(num_list)

num = int(input('输入:'))

# 质数大于 1

if num >1:

# 查看因子

for i in range(2, num):

# 如果输入的数能被小于它的任何一个数除尽则跳过

if (num % i) == 0:

break

else:

# 把素数插入num_list最后一项

num_list.insert(-1, num)

# 再次排序

num_list = sorted(num_list)

# 打印排序后的列表

print(num_list)

在你的这个思路中,可以优化的主要就是几方面:

1:求因数可以仅算到n的平方根q为止,对于n,每有一个小于q的因数,就有一个对应的大于q的因数,两者之积为n。

2:在完数函数中已经完成了求因数的工作,不需要另做一次,直接在完数函数中拼装结果即可。

3:目前来说,已知的完全数都是偶数,因此,最后那行那里可以做num+=2优化,但数学上目前还没有证明不存在奇完全数,这种做法从理论上来说是不严谨的。

实际上,当一个数比较大的时候,做因数分解是一个很费时的工作,要找更大的完数,需要更好的因数分解的方式。比如先求出所有的质因数,在使用这些质因数的组合来寻找非质因数。因为质因数必然是在质数表中,而质数表可以建立一次然后重复使用,相对一个个的试商就快得多了。

如果要进一步优化以寻找更大的完全数,那么,就需要利用更多的关于完全数的规律了,比如,除6以外,其它的完全数都是9n+1,都是p^2*q……,这些优化在你这个框架下实现就比较麻烦。

总体来说,不解决因数分解的问题,主要就是上述三种优化了。

可以使用Python中的for循环和range函数来实现,具体步骤如下:

1. 使用input函数获取用户输入的整数;

2. 使用for循环和range函数遍历1到用户输入的整数;

3. 对每个数字进行判断,如果能够整除用户输入的整数,则输出该数字;

4. 重复步骤2和3,直到遍历完所有的数字。