质因数分解,输一个数x,求它的质因数

质因数分解,输一个数x,求它的质因数。如输入60,则得到60=223*5

我认为的解题思路是——

  先找出小于整数x的质数(素数)集合,从小到大遍历素数集合,如果能整除,收集该素数并让x /= i ,继续除;不能循环,继续循环。输出收集到的素数集合即是x的质因式集合。


  • 代码运行效果截屏图片

    img

  • Python 代码

#!sur/bin/nve python
# coding: utf-8

'''
分解质因数

'''

def isprime(n) -> list:
    ''' 素数确认 '''
    
    if n < 2:
        return # 小于2的不是素数。
    
    for i in range(2, n):
        
        if not n%i:
            return # 能被 1 < i < n 整除,就不是质数。
    
    return n # 返回质数。


def factors(n) -> list:
    ''' 分解质因数 '''
    primes = [i for i in range(n+1) if isprime(i)] # 解析不大于整数的素数集合。
    factors = [] # 质因式集合初值。

    for i in primes:

        while True:

            if not n%i:
                n /= i
                factors.append(i) # 收集质因数。
            else:
                break

    return ' × '.join(map(str, factors)) # 格式化质因数集合为字符串。


if __name__ == '__main__':
    n = int(input(f"\n{' 分解质因数 ':~^45}\n\n{'输入一个整数:':>11}"))
    factor = f"{n} = {factors(n)}"
    print(f"\n\n{factor:^50}\n{'':~^50}\n")

更多详情请翻阅我的学习笔记——



  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7519607
  • 除此之外, 这篇博客: 两次3*3的卷积和一次5*5的卷积那个更优?中的 假如原始图像尺寸为x 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •     但如果是其余尺寸呢?我们不妨设新的图像尺寸为x,即w,h均为x。(步长为1,不填充)

        第一种卷积核(5*5),其参数量为5*5=25个,卷积次数为(x-4)^2次。(减4是因为卷积的操作,在不填充零的情况下会损失左、右边各两个元素)
        故计算量为25*(x-4)2=25x2-200x+400次。

        第二种卷积核(3*3)*2,其参数量为3*3+3*3=18个,卷积次数为(x-2)2+(x-2-2)2次。(减2是因为卷积的操作,在不填充零的情况下会损失左右边各1个元素.第二部分减2再减2是因为进行了第二次卷积,输出的特征图更小了。)
        故计算量为18*[(x-2)2+(x-2-2)2]=18x2-108x+180次。
        接下来只需要比较下面两个式子的大小来就可以了,即:25x2-200x+400和18x2-108x+180

  • 以下回答由chatgpt基于相关博客总结生成:

    我可以使用试除法来实现对一个数字进行质因数分解。具体步骤如下:

    1. 定义一个函数 factorize(num),参数为待分解的整数 num
    2. 定义一个空列表 factors,用于存储所有的质因数。
    3. num 的最小质因数 i,并将其加入到 factors 列表中。如果 inum 自身,则跳出循环。
    4. num 除以 i 的商作为新的 num 的值,重复步骤3直到 num 等于1。
    5. 返回 factors 列表作为结果,其中的元素就是 num 的质因数。

    下面是实现该算法的 Python 代码:

    def factorize(num):
        factors = []
        i = 2
        while i <= num:
            if num % i == 0:
                factors.append(i)
                num //= i
            else:
                i += 1
        return factors
    

    例如,调用 factorize(60),将会返回 [2, 2, 3, 5],即数字60的质因数是2、2、3和5。