题解(伪):可以打表找下规律,就会发现答案为n^k,直接快速幂即可
正解:注意到一个数字x必然会被唯一表示成a2×b的形式.其中∣μ(b)∣=1。 所以这个式子会把[1,nk]的每个整数恰好算一次. 所以答案就是nk,快速幂即可. 时间复杂度O(logk).
代码如下:
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll MOD = 1e9 + 7;
ll x,k;
ll q_pow(ll x, ll k){
ll res = 1;
while(k > 0){
if(k & 1) res = res * x % MOD;
x = x * x % MOD;
k >>= 1;
}
return res;
}
int main()
{
int kase = 0;
while(~scanf("%lld%lld",&x,&k)){
x %= MOD;
printf("Case #%d: %lld\n",++kase,q_pow(x,k));
}
return 0;
}