RXD is a good mathematician.
One day he wants to calculate:
output the answer module 109+7 109+7.
1≤n,k≤1018 1≤n,k≤1018
p1,p2,p3…pk p1,p2,p3…pk are different prime numbers
One day he wants to calculate:
∑i=1nkμ2(i)×⌊nki−−−√⌋
∑i=1nkμ2(i)×⌊nki⌋
output the answer module 109+7 109+7.
1≤n,k≤1018 1≤n,k≤1018
μ(n)=1(n=1)
μ(n)=1(n=1)
μ(n)=(−1)k(n=p1p2…pk)
μ(n)=(−1)k(n=p1p2…pk)
μ(n)=0(otherwise)
μ(n)=0(otherwise)
p1,p2,p3…pk p1,p2,p3…pk are different prime numbers
There are exact 10000 cases.
For each test case, there are 2 numbers n,k n,k.
10 10
Case #1: 999999937
这个问题最终是求n^k,也就是快速幂问题。快速幂知识请查看 点击打开链接
#include <iostream>
#include <cstdio>
using namespace std;
typedef long long LL;
const LL mod=1e9+7;
LL fastpower(LL n,LL k) //快速幂的运用
{
LL ans=1,vis=n;
while(k!=0)
{
if(k&1==1)
ans=((ans%mod)*(vis%mod))%mod;
vis=((vis%mod)*(vis%mod))%mod; //注意vis必须每次先取模再乘积,否则vis会超过long long 类型的范围。
k>>=1; // k=k/2;
}
return ans;
}
int main()
{
LL n,k,answer;
int t=1;
while(scanf("%I64d%I64d",&n,&k)!=EOF)
{
answer=fastpower(n,k);
printf("Case #%d: %lld\n", t++, answer);
}
return 0;
}