鱼C论坛

 找回密码
 立即注册
查看: 3343|回复: 0

[技术交流] 用python写的分解质因数的程序(对速度进行了一定的优化)

[复制链接]
发表于 2020-10-19 10:49:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
自己写了一个用于分解质因数的程序,优化了一下速度,使16位以内的数的分解速度,限制在几百毫秒以内




  1. import time as t

  2. def prime_factorization(i):
  3.     i = int(i)
  4.     t1 = t.time()
  5.     x = []
  6.     y = []
  7.     p = i
  8.     j = 2
  9.     heshu = False
  10.     while i != 1.0 and j <= i:
  11.         if i % j == 0:
  12.             heshu = True
  13.         if heshu == True and j > i ** 0.5:
  14.             x.append(int(i))
  15.             y.append(1)
  16.             break
  17.         
  18.         if i % j != 0:
  19.             j += 1
  20.             if j > p ** 0.5 and heshu == False:
  21.                 print('\n\t您输入的数字是质数!', end='')
  22.                 break
  23.             continue
  24.             
  25.         count = 0
  26.         x.append(j)
  27.         while i % j == 0:
  28.                 count += 1
  29.                 i /= j
  30.                
  31.         y.append(count)
  32.         #print(i, i ** 0.5)

  33.     if heshu == True:
  34.         print('\n\t质因数分解: '+str(p)+' = ', end='')
  35.         for m in range(len(y)):
  36.             print(str(x[m])+'^'+str(y[m]), end='')
  37.             if m < len(y) - 1:
  38.                 print(' * ', end='')
  39.     t2 = t.time()
  40.     deltat = round(t2 - t1, 3)
  41.     print()
  42.     print('\t跑完程序所花时间: '+str(deltat)+' 秒。\n')

  43. while True:
  44.     i = input('请输入要分解的正整数:')
  45.     try:
  46.         i = int(i)
  47.     except ValueError:
  48.         print('您输入的不是数,请重新输入!')
  49.         continue
  50.     if int(i) < 0:
  51.         i *= -1
  52.     prime_factorization(i)
  53.         
  54.    
复制代码



运行结果见截图

iPad上的运行效果

iPad上的运行效果
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-28 11:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表