algorithm - 与求幂相关的任务的更好算法

标签 algorithm

最近我发现竞赛中给出了一个有趣的任务,但没有任何作者的解决方案或解释如何解决。

任务包括以下内容:给用户一个数字 N,并且必须计算 a^N (n 的次方,而不是 xor 运算),我只能通过乘以 a 或先前的结果来计算。我应该给出我应该做的最少计算以获得计算 a^n .

例子:

N=27
Then the answer is 6:
a^2=a*a
a^3=a^2*a
a^6=a^3*a^3
a^9=a^3*a^6
a^18=a^9*a^9
a^27=a^18*a^9

N 的限制如下:N<=40000 .时间和内存限制为:2s and 256MB .

解决这个任务的好方法是什么?

提前致谢!!!

最佳答案

这是一种简单的解决方案,但速度不够快.. 我希望有人可以通过一些调整来增强它? 或者对于只对解决问题感兴趣的人。

#include<set>
#include<iostream>
using namespace std;

int main(int argc, char** argv)
{
    set<int> A, B;
    A.insert(1);
    int n = atoi(argv[1]), i;
    for(i=1; A.find(n) == A.end(); i++) {
        for(auto& a : A) for(auto& b : A) B.insert(a + b);
        for(auto& c : B) A.insert(c);
    }
    cout << i << endl;
}

换个方式问吧.. 计算n次能知道多远? 它只是每次翻倍。 我错过了什么吗? 也就是说,仅通过这一行,

while(pow(2, n)< atoi(argv[1])) n++;
cout << n;

可以得到结果。

关于algorithm - 与求幂相关的任务的更好算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37715378/

相关文章:

algorithm - 如何更有效地将有序树编码为比特序列

algorithm - 可变长度元组的集合和具有多个值的映射到加权组合

algorithm - 一组给定操作的最佳数据结构 - 添加、检索最小值/最大值和检索特定对象

algorithm - 理解 Dijkstra 算法

c - 为什么在 C 中的 char 指针之间传输字符串时我的程序会崩溃?

algorithm - 该算法的时间复杂度

php - 根据 id 和 parent_id 属性对集合(或对象数组)进行排序

algorithm - 关于如何提高点击机器人性能的建议

algorithm - 深度优先搜索会产生冗余吗?

复制文件的 C# 代码,这个片段可以改进吗?