0%

Hdu 6063 - RXD and math(思维)

题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=6063

题目大意:
求式子i=1nkμ2(i)×nki\sum_{i=1}^{n^k}\mu^2(i)\times\lfloor \sqrt{\frac{n^k}{i}}\rfloor的值

分析:
根据多校第三场的1008题解,任意一个数xx,可以被唯一的表示成a2×ba^2\times b的形式,其中μ2(b)=1\mu^2(b) = 1,对于小于nkn^k的每一个μ2(i)=1\mu^2(i)=1ii来说,xi\lfloor \sqrt{\frac{x}{i}} \rfloor表示a2×ixa^2\times i \leq x的所有a的个数,由于对于每个ii,能表示出的数均不同,所以小于nkn^k的所有的ii恰好能表示出nkn^k内的所有数,所以答案就是nkn^k,快速幂即可

注意:由于n,kn,k均为101810^{18}级别,所以如果快速幂前不对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;
}