Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有更有效的方法从单个数字中找到最小的矢量3组合?_Python_Loops_Unity3d_Vector_Lua - Fatal编程技术网

Python 有没有更有效的方法从单个数字中找到最小的矢量3组合?

Python 有没有更有效的方法从单个数字中找到最小的矢量3组合?,python,loops,unity3d,vector,lua,Python,Loops,Unity3d,Vector,Lua,我正试图从一个数字中找到向量3的最小组合,到目前为止,我已经有了工作代码,但它真的没有效率 为了演示,假设用户输入数字n,函数应输出3个数字(x、y、z)的组合,其和最小,同时仍能乘以原始数字n 因此,如果用户输入100作为n,那么x、y和z应该是4、5和5。(或(5,5,4);(5,4,5)) 我正在做3个for循环来计算x、y和z的独立值。它对小数字非常有效,但随着n的增加,它的计算量会变得非常大。我正在寻找任何方法,我可以改变计算方法,使这更快。我对近似算法持开放态度,因为它不需要100%

我正试图从一个数字中找到向量3的最小组合,到目前为止,我已经有了工作代码,但它真的没有效率

为了演示,假设用户输入数字n,函数应输出3个数字(x、y、z)的组合,其和最小,同时仍能乘以原始数字n

因此,如果用户输入100作为n,那么x、y和z应该是4、5和5。(或(5,5,4);(5,4,5))

我正在做3个for循环来计算x、y和z的独立值。它对小数字非常有效,但随着n的增加,它的计算量会变得非常大。我正在寻找任何方法,我可以改变计算方法,使这更快。我对近似算法持开放态度,因为它不需要100%准确

我最初是用Lua写的,但这个问题与一种语言没有直接关系

函数计算器(大小)
局部向量={}
本地最低=数学
本地索引=零
对于x=0,大小为1
对于y=0,大小为1
对于z=0,大小为1
如果大小-(x*y*z)==0,则
表.插入(矢量,矢量3.新的(x,y,z))
结束
结束
结束
结束
表.foreachi(向量、函数(i、v)
局部组合=v.X+v.Y+v.Z
如果组合<最低,则
最低=合并
指数=i
结束
(完)
返回向量[索引]
结束
用Python编写相同的代码,以防有人不知道Lua语法

类向量3:
定义初始(self,x,y,z):
self.X=X
self.Y=Y
self.Z=Z
def CalculateVector(大小):
向量=[]
最低=尺寸+3
索引=无
对于范围内的x(尺寸):
对于范围内的y(尺寸):
对于范围内的z(尺寸):
如果大小-(x*y*z)==0:
附加向量(向量3(x,y,z))
对于枚举中的i,v(向量):
组合=v.X+v.Y+v.Z
如果组合<最低:
最低=合并
指数=i
返回向量[索引]

分解
n
并将其所有素因子的每一部分分成3组进行测试

函数将\u数\u拆分为\u因子\u,具有\u最小\u和(n,因子)
断言(n>0,因子>0)
局部素数={}
局部度数={}
局部项={}
局部p=2
局部步长={4,1,2,0,2}
局部m=0
当n>1时
如果p*p>n,那么
p=n
结束
如果n%p==0,则
局部d=0
重复
d=d+1
n=n/p
直到n%p~=0
m=m+1
素数[m]=p
度[m]=d
术语[m]={}
结束
p=p+step[p%6]
结束
局部部分={}
对于j=1,系数为
零件[j]=1
结束
本地最佳_sum=math.mage
局部最佳_部分={}
局部过程下一个素数
本地函数拆分(总和、数量、k)
如果数量<系数,则
本地最大值=零件[数量]==零件[数量+1]和总和>条款[k][数量]和条款[k][数量]或总和
数量=数量+1
本地最小值=数量==因子和总和或0
对于val=最小值,最大值do
术语[k][qty]=val
按金额拆分(总和、数量、k)
结束
其他的
局部p=素数[k]
对于j=1,系数为
部分[j]=部分[j]*p^术语[k][j]
结束
处理下一个素数(k)
对于j=1,系数为
部分[j]=部分[j]/p^术语[k][j]
结束
结束
结束
函数过程\u下一个\u素数(k)
如果k
用法:

local t=将数量分解为具有最小和(100,3)的因子
打印(拆包(t))->4 5

分解
n
并将其所有素因子的每一部分分成3组进行测试

函数将\u数\u拆分为\u因子\u,具有\u最小\u和(n,因子)
断言(n>0,因子>0)
局部素数={}
局部度数={}
局部项={}
局部p=2
局部步长={4,1,2,0,2}
局部m=0
当n>1时
如果p*p>n,那么
p=n
结束
如果n%p==0,则
局部d=0
重复
d=d+1
n=n/p
直到n%p~=0
m=m+1
素数[m]=p
度[m]=d
术语[m]={}
结束
p=p+step[p%6]
结束
局部部分={}
对于j=1,系数为
零件[j]=1
结束
本地最佳_sum=math.mage
局部最佳_部分={}
局部过程下一个素数
本地函数拆分(总和、数量、k)
如果数量<系数,则
本地最大值=零件[数量]==零件[数量+1]和总和>条款[k][数量]和条款[k][数量]或总和
数量=数量+1
本地最小值=数量==因子和总和或0
对于val=最小值,最大值do
术语[k][qty]=val
按金额拆分(总和、数量、k)
结束
其他的
局部p=素数[k]
对于j=1,系数为
部分[j]=部分[j]*p^术语[k][j]
结束
处理下一个素数(k)
对于j=1,系数为
部分[j]=部分[j]/p^术语[k][j]
结束
结束
结束
函数过程\u下一个\u素数(k)
如果k