RXD and math
思路
(u)函数是莫比乌斯函数,这个不影响做题,这个式子算的是([1,n^k])中能够写成(a*b^2)的数的个数,(u(a)!=0).然后我们可以证明任何数都可以唯一写成(a*b^2)的形式,因为(b = p1*p2*..pn),假设(a)中没有(b)中的因子,那么肯定是唯一表示的,如果含有(b)中的因子如果表示的形式要变,那么肯定要将(b)改变,那么如果(b)改变的话假设将任意一个(p)和(a)中的某个不在(b)中的质因子互换时,由于(p)无论在(a)中本来有或没都无法构成平方。快速幂来下就可以了,就是求(n^k)复杂度(O(logn))
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL mod = 1e9+7;
LL quick(LL n,LL m);
int main(void)
{
LL n,k;
int __cn = 0;
while(scanf("%lld %lld",&n,&k)!=EOF)
{
printf("Case #%d: %lld
",++__cn,quick(n,k));
}
return 0;
}
LL quick(LL n,LL m)
{
LL ask = 1;
n%=mod;
while(m)
{
if(m&1)
ask = ask * n%mod;
n = n*n%mod;
m>>=1;
}
return ask;
}