题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=6063
题目大意:
求式子∑i=1nkμ2(i)×⌊ink⌋的值
分析:
根据多校第三场的1008题解,任意一个数x,可以被唯一的表示成a2×b的形式,其中μ2(b)=1,对于小于nk的每一个μ2(i)=1的i来说,⌊ix⌋表示a2×i≤x的所有a的个数,由于对于每个i,能表示出的数均不同,所以小于nk的所有的i恰好能表示出nk内的所有数,所以答案就是nk,快速幂即可
注意:由于n,k均为1018级别,所以如果快速幂前不对n取模,过程中会爆long long
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| #include <iostream> #include <string.h> #include <stdio.h> #include <algorithm> using namespace std;
typedef long long ll; const int mod = 1e9+7;
ll quickpow(ll a,ll n) { ll res= 1; while (n) { if (n&1) res = res*a%mod; a = a*a%mod; n >>= 1; } return res; }
int main() { ll n,k; int t = 1; while (~scanf("%lld%lld",&n,&k)) { ll ans =quickpow(n%mod,k); printf("Case #%d: %lld\n",t++,ans%mod);
} return 0; }
|