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;
}

posted @ 2017-08-01 23:16  sCjTyC  阅读(279)  评论(0编辑  收藏  举报