Skip to content

HJ6 质数因子【☆☆☆☆☆】

描述

功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )

数据范围: $$ 1 ≤ n ≤ 2 *10^9+14 $$

输入描述:

输入一个整数

输出描述:

按照从小到大的顺序输出它的所有质数的因子,以空格隔开。

示例

输入:

180

输出:

2 2 3 3 5

代码

python
import math
m = int(input())
 # 一个数可以被它所有的质因子表示
 # 这里仅考虑不大于根号下n的因子,如果暴力从2到自身,都会导致超时,太坑
 # 因为当n被所有不大于根号下n的【质】因子整除后,要么余1,要么余2,要么会剩下一个且仅会剩下一个大于等于根号下n小于等于n的质数(不可能出现两个不相等且同时大于根号下n的质因子a和b,这会导致a*b>n)
for i in range(2, int(m/2) + 1):      
    while int(m) % i == 0:
         # 第一个能被整除的一定是最小的质数因子(如果是合数,一定有2<=x<i的质因子x)
        # 后续能被整除的也一定是质数,若是合数,则合数的质因子肯定出现在之前,不成立
        print(i, end=' ')
        m = m // i

if m >=2:    # 大于等于2,意味着上边循环没有进入或者剩余大于根号值的数,m本身就属于质因数,输出即可
    print(m)

知识点

  • Math函数