2017 Multi-University Training Contest

来源:互联网 发布:阿里云大数据 编辑:程序博客网 时间:2024/06/03 14:35

http://acm.hdu.edu.cn/showproblem.php?pid=6063


题意:

  如同题目所说,输入n和k求题目中的公式的结果。

思路:

  注意到一个数字x必然会被唯一表示成a2×b的形式.其中μ(b)=1。 所以这个式子会把[1,nk]的每个整数恰好算一次. 所以答案就是nk​​,快速幂即可。注意到1n,k1018,所以进行快速幂之前要先对k处理一下。

代码:

#include<bits/stdc++.h>using namespace std;#define ll long longconst ll MOD = 1e9 + 7;ll myPow(ll a,ll b){    ll t = a,ans = 1;    while(b){        if(b % 2){            ans = ans * t % MOD;        }        t = t * t % MOD;        b /= 2;    }    return ans;}int main(){    ll cas = 1;    ll n,k;    while(~scanf("%lld %lld",&n,&k)){        n %= MOD;        ll ans = myPow(n,k % (MOD - 1));        printf("Case #%lld: %lld\n",cas++,ans);    }}
原创粉丝点击