RXD and math
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\n",++__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;
}
油!油!you@