• HDU


    传送门


    【分析】

    等价于分析

    (quad ans)

    (displaystyle =sum_{i=1}^n oldsymbol mu^2(i)lfloorsqrt {nover i} floor)

    考虑莫比乌斯函数 (oldsymbol mu(n)) 不为 (0) 时的取值一定为 (pm 1)

    ((forall n o oldsymbol mu(n) eq 0) o oldsymbol mu^2(n)=1)

    而使得 (oldsymbol mu(n) eq 0) ,则 ( otexists p^2 o p^2mid n(pin Prime))


    考虑每个 (t=a^2cdot b) 的形式((a) 是极大的形式),则 (oldsymbol mu^2(b)=1)

    考虑将正整数集 (Z) ,按上述 (b) 进行归纳,会发现,对于 (forall nin Z) ,有且仅有一个 (b) 使得 (n) 被归纳进 (b) 所在的集合

    因此该归纳构成对正整数集 (Z) 的一个划分

    故对于 ([1,n]) 范围内每个 (b) ,设其所在集合为 (H_b) ,则 (|H_b|=lfloorsqrt {nover b} floor)

    存在 (1)(a(a=1)) 使得 (oldsymbol mu^2(a^2cdot b)=1)

    且存在 ((sqrt{nover b}-1))(a) 使得 (oldsymbol mu^2(a^2cdot b)=0)

    (H_b) 对求和式的贡献为 (displaystyle sum_{a^2cdot bleq n}oldsymbol mu^2(a^2cdot b)lfloorsqrt {nover a^2cdot b} floor=oldsymbol mu^2(b)lfloorsqrt{nover b} floor+0=lfloorsqrt {nover b} floor=|H_b|)

    故对于所有的 (H_b) 的贡献求和得到 (displaystyle ans=sum_{bleq n}|H_b|=n)


    故对于原题,直接得到答案为 (n^k)

    记得先取模再快速幂即可


    【代码】

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int P=1e9+7;
    inline ll fpow(ll a,ll x) { ll ans=1; for(a%=P;x;x>>=1,a=a*a%P) if(x&1) ans=ans*a%P; return ans; }
    int main(){
    	ios::sync_with_stdio(0);
    	cin.tie(0); cout.tie(0);
    	ll n,k;
    	for(int i=1;cin>>n>>k;++i)
    		cout<<"Case #"<<i<<": "<<fpow(n,k)<<"
    ";
    	cout.flush();
    	return 0;
    }
    
  • 相关阅读:
    C语言I博客作业09
    C语言I博客作业08
    C语言I作业07
    C语言博客作业06
    C语言I博客作业05
    C语言I博客作业04
    C语言I博客作业03
    C语言|博客作业07
    C语言|博客作业06
    C语言|博客作业05
  • 原文地址:https://www.cnblogs.com/JustinRochester/p/14599384.html
Copyright © 2020-2023  润新知