我有点问题。任务是接受变量d
的输入 - 这意味着测试数量,输出变量a
和b
。每个测试都适用于另一对a
和b
&。此代码的结果应该是 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秒。
答案 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秒:)