代码如下(排序使用了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,直到遍历完所有的数字。