【发布时间】:2012-10-05 18:27:02
【问题描述】:
这是我的代码,但我想对其进行优化。我不喜欢在 n 的平方根之前测试所有数字的想法,考虑到人们可能会面临寻找大量的。你的回答会有很大帮助。提前致谢。
unsigned int* factor(unsigned int n)
{
unsigned int tab[40];
int dim=0;
for(int i=2;i<=(int)sqrt(n);++i)
{
while(n%i==0)
{
tab[dim++]=i;
n/=i;
}
}
if(n>1)
tab[dim++]=n;
return tab;
}
【问题讨论】:
-
你有一个错误,你正在返回一个在堆栈上的数组。 factor() 返回后的任何其他调用都可能会覆盖您的数组。此外,不返回使用的数组的维度(dim)。
-
作为参考,整数分解是难题之一。 (事实证明,公钥加密(阅读:SSL、RSA 等)依赖于它 已经足够困难了。)你真正能得到的最好结果就是测试所有 prime 介于 2 和平方根之间的数字,但是你也必须担心找到素数。