• 每日一题——将一个正整数分解质因数


    12. 将一个正整数分解质因数

    方法1:有一点点麻烦,分为两部分:1.先筛选出小于这个正整数的所有质数;2.再从这些质数中提取因数。

    1. # 将一个正整数分解质因数
    2. from math import sqrt
    3. n = eval(input("输入一个大于1的正整数:"))
    4. def prime_num(n):
    5. # 存储小于n的质数
    6. leap = 1
    7. nums = []
    8. for m in range(2, n + 1):
    9. k = int(sqrt(m + 1))
    10. for i in range(2, k + 1):
    11. if m % i == 0:
    12. leap = 0
    13. break
    14. if leap == 1:
    15. nums.append(m)
    16. leap = 1
    17. return nums
    18. def factor_pn(n, nums):
    19. i = 1
    20. the_num = n
    21. for j in nums:
    22. while j <= the_num:
    23. if the_num % j == 0:
    24. factor = j # 质因数
    25. if i == 1:
    26. print(factor, end=' ')
    27. else:
    28. print('*', factor, end=' ')
    29. the_num = int(the_num / j)
    30. i += 1
    31. else:
    32. break
    33. nums = prime_num(n)
    34. print(n, '以内的质数:', nums)
    35. print('分解质因数:')
    36. factor_pn(n, nums)

     函数prime_num(n)也可直接用来解决输出某个正整数以内的质数问题。

    方法2:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:

            1.如果这个质数恰好等于n,则说明分解质因数的过程已经结束,打印出即可;

             2.如果n>k,但能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,然后重复第一步;

            3. 如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

    这个方法其实和方法1中的函数factor_pn(n, nums)是差不多的,也可以说方法1的第一步其实是多余的,因为每次都将the_num 除以 j的商赋值给the_num,也就不会有非质数的存在了。

    1. from sys import stdout
    2. n = int(input("输入一个大于1的正整数:"))
    3. for i in range(2, n + 1):
    4. while n != i:
    5. if n % i == 0:
    6. stdout.write(str(i))
    7. stdout.write('*')
    8. n = n / i
    9. else:
    10. break
    11. print(int(n))

    关于stdout.write(),其实当我们在 Python 中调用 print(obj) 的时候,事实上是调用了sys.stdout.write(obj '\n')

    print 将obj打印到了控制台,然后又追加了一个换行符“\n”

    print 其实可以看作是调用了 sys.stdout 的 write 方法。

    看一个简单的例子会帮助理解:

    1. import sys
    2. sys.stdout.write('hello')
    3. sys.stdout.write('world')
    4. print('\n')
    5. sys.stdout.write('hello\n')
    6. sys.stdout.write('world\n')
    7. print('\n')
    8. print('hello')
    9. print('world')

  • 相关阅读:
    Tensorflow 模型保存、节点修改以及Serving 图优化
    WEB 渗透之CSRF
    【微软漏洞分析】一个未修复的问题 MSRC-20706 - Windows 7:NtPowerInformation 中的管理员检查绕过
    ubuntu修改网卡名称
    Java ReentrantLock锁源码走读
    微服务架构终极指南
    月薪10k,20k,40k的Java工程师,差别到底在哪?
    JVM-环境准备&性能指标&基础知识
    前端技能树,面试复习第 46 天—— Vue 生命周期 | 父子组件钩子的执行顺序 | 组件间通信有哪些方式
    【linux基础(六)】Linux中的开发工具(中)--gcc/g++
  • 原文地址:https://blog.csdn.net/weixin_51995147/article/details/125493191