python - 如何让我的 python 程序运行得更快?我收到带有以下代码的“killed 9”消息
问题描述
我试图演示从 N 到 Q 的自然数和有理数之间的双射。当我运行代码时,它会运行一段时间,然后进程以“killed 9”消息终止。
“n”代表自然数,“o”分子和“m”分母
这是我的代码:
import numpy as np
n,m,o = 1766445895,1,1
N,M,O=[],[],[]
O.append(o)
M.append(m)
N.append(n)
go_on = True
while go_on:
if n % 2 == 0:
n=(n-2)//2
N.append(n)
elif n % 2 == 1:
n=(n-1)//2
N.append(n)
elif n<=0:
go_on = False
for i in range(len(N)):
if N[i] % 2 == 0:
o=m+o
O.append(o)
M.append(m)
if N[i] % 2 == 1:
m=o+m
O.append(o)
M.append(m)
for i in range(len(N)):
if i < 10:
print('{:d}: n = {:10d}, q = {:6d}/{:6d}'.format(i, N[i],O[i],M[i]))
else:
print('{:d}: n = {:10d}, q = {:6d}/{:6d}'.format(i, N[i],O[i],M[i]))
解决方案
这可以简化为:
N, M, O = [1766445895], [1], [1]
n, m, o = N[0], M[0], O[0]
while n > 0:
n = (n-2)//2 if n % 2 == 0 else (n-1)//2
N.append(n)
if n % 2 == 0:
o += m
else:
m += o
O.append(o)
M.append(m)
for i, (_n, _o, _m) in enumerate(zip(N, O, M)):
print(f'{i}: n = {_n:10d}, q = {_o:6d}/{_m:6d}')
推荐阅读
- eos - 什么是正确的cmd。EOS cmd 的行调用。“克莱奥斯定契约?”
- javascript - 为什么 Web 服务不能正确返回字符串?
- c# - 如何将属性与 DataGrid 中的复选框绑定?
- apache - 如何在 Apache Knox 中启用 SSO?
- python - 在python中正确分配数据结构
- fortran - 无论如何检查矩阵行中的n个项在fortran中是否相等?
- azure - 应用服务 HTTP/2 不工作
- python - 带有链式比较的 PyCharm 输入警告
- ros - 如何查看所有当前使用的包?
- node.js - 在 docker 镜像中运行 npm test 并退出