orz rzz
题目大意:设
f(n)=∑d|ngcd(d,nd)
,
F(n)=∑ni=1f(i)
,求
F(1015)
的值
题解:
F(n)=∑ni=1∑d|igcd(d,id)
=∑d∑nd2i=1∑d′|i[gcd(d′,id′)==1]
=∑d∑d′dμ(d′)∑n(dd′)2i=1σ0(i)
=∑nd=1ϕ(d)∑nd2i=1σ0(i)
时间复杂度
O(n√lnn)
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<ctime>
#include<cmath>
#include<cstdlib>
#include<cstdio>
#define LL long long
using namespace std;
const LL n = 1000000000000000;
LL sigma(LL n)
{
LL ret = 0;
for (LL i = 1,j;i <= n;i = j + 1)
{
j = min(n / (n / i),n);
ret += (j - i + 1) * (n / i);
}
return ret;
}
LL phi(LL x)
{
LL ret = 1;
for (LL i = 2;i * i <= x;i ++)
if (x % i == 0)
{
ret *= i - 1;
for (x /= i;x % i == 0;ret *= i,x /= i);
}
if (x ^ 1) ret *= x - 1;
return ret;
}
int main()
{
LL ans = 0;
for (LL d = 1;d * d <= n;d ++)
ans += phi(d) * sigma(n / d / d);
cout << ans << endl;
return 0;
}