最后一个取幂数

时间:2017-11-28 15:59:19

标签: c++ exponentiation

我有点问题。任务是接受变量d的输入 - 这意味着测试数量,输出变量ab。每个测试都适用于另一对ab&。此代码的结果应该是 b 取幂的最后一个数字。 例如:

//input
2 (it is d)
2 3 (a,b)
3 3 (a,b)

//output
8
7

这就是我尝试这样做的方式:

#include <iostream>
#include <cmath>

using namespace std;
int potega(int a, int b);

int main()
{   
int d;
int i;
cin >> d;
int t[d];
int a;
int b;
for(i=0; i<=d-1; i++)
{
    cin >> a >> b;
    t[i]=pow(a%10,b);
}
for(i=0; i<=d-1; i++)
{
    cout << t[i]%10 << endl;

 }
}

你有什么建议吗?我是初学者。执行时间应小于0.529秒。

2 个答案:

答案 0 :(得分:0)

不是循环遍历每个权力,而是使用数字分解为其平方幂。

因此,如果你说7的指数与(1 + 2 + 4)完全相同,那么你可以使用指数的幂1,2和4,这将显着加快指数。如果您有指数9(8 + 1),则将数字平方3次以获得8次幂,并且在乘法中跳过次幂2和4。

因此,对于任何给定的两个数字,您将存储当前数字的^(2 ^ n)次幂,而不是检查此特定幂是否为b的二进制表示。

这也称为平方取幂,您可以在this wiki site上阅读更多相关内容。除了你的修改,你实际上总是存储%10的其余数字而不是全数。

答案 1 :(得分:0)

如果有人需要解决方案:

/*for any a last number of a^b = last number of a^b+4 so: */
if (b%4==0)
{
    b=4;
}
else b=b%4;

它将执行速度从1秒提高到不到0.01秒:)