我怎样才能加快我的算法?
How I can speed up my algorithm?
我正在解决一些问题,但我无法解决这些问题。我必须编写一个用户输入十进制数的代码,并且我需要计算该数字在其他众多系统中以数字 1 开头的次数。
这是算法:
for (int i = 3; i <= n; i++) {
int z = n;
while (z != 0) {
x = z % i;
z = z / i;
}
if (x == 1) {
brOsnova++;
}
}
不用循环,使用这个:
x = x - ((x / i) * i);
if (x == 1)
{
...
}
这仅适用于整数数学。
您可以通过不检查验证的 i 来加速它
i <= n < 2*i
因为他们都会满足。
因此,只检查for(int i = 3; i <= n/2; ++i)
,然后将(n+1)/2添加到最后的brOsnova
.
我相信它可以进一步加速并且必须有一些 O(log(n)) 算法,但也许它会很牵强......或者 algorithm
标签的一个很好的候选问题.
我正在解决一些问题,但我无法解决这些问题。我必须编写一个用户输入十进制数的代码,并且我需要计算该数字在其他众多系统中以数字 1 开头的次数。 这是算法:
for (int i = 3; i <= n; i++) {
int z = n;
while (z != 0) {
x = z % i;
z = z / i;
}
if (x == 1) {
brOsnova++;
}
}
不用循环,使用这个:
x = x - ((x / i) * i);
if (x == 1)
{
...
}
这仅适用于整数数学。
您可以通过不检查验证的 i 来加速它
i <= n < 2*i
因为他们都会满足。
因此,只检查for(int i = 3; i <= n/2; ++i)
,然后将(n+1)/2添加到最后的brOsnova
.
我相信它可以进一步加速并且必须有一些 O(log(n)) 算法,但也许它会很牵强......或者 algorithm
标签的一个很好的候选问题.