解题报告:
只贴个代码吧,核心思路是利用二级制,让x^y时从每次乘x变成乘x^(2^k),来将速度提升至O(logy)级别。快速幂详细解释百度去
#include<iostream>
#define ll long long
using namespace std;
int main()
{
ll x,y;
while(cin>>x)
{
if(x==-1)return 0;
cin>>y;
ll ans=1,mo=x;
while(y)
{
if(y%2==1)ans*=mo;
mo=mo*mo;
y>>=1;
}
cout<<ans<<endl;
}
}
当然,这题事实上十分简单,数据很水,直接暴力也能过(没看到取模要求的幂基本上都能暴力过)qwq
下为暴力写法,代码量差别其实很小,只有循环那里不一样。快速幂还是可以一学的。
#include<iostream>
#define ll long long
using namespace std;
int main()
{
ll x,y;
while(cin>>x)
{
if(x==-1)return 0;
cin>>y;
ll ans=1,mo=x;
for(ll i=1;i<=y;i++)
{
ans*=mo;
}
cout<<ans<<endl;
}
}