欧拉反演
Chivas-Regal
#
# 洛谷P1447_能量采集
# 🔗
# 💡
这个和仪仗队那个很像啊
位置上的点它前面挡住的人数就是
所以我们把柿子抽象出来
对于
利用欧拉反演的核心公式
有
数不大直接暴力跑就行
# ✅
namespace Number {
const int N = 1e5 + 10;
int phi[N];
bool not_prime[N];
vector<int> prime;
inline void Sieve () {
not_prime[0] = not_prime[1] = phi[1] = 1;
for ( int i = 2; i < N; i ++ ) {
if ( !not_prime[i] )
prime.push_back(i),
phi[i] = i - 1;
for ( int j = 0; j < prime.size() && i * prime[j] < N; j ++ ) {
not_prime[i * prime[j]] = 1;
if ( i % prime[j] == 0 ) {
phi[i * prime[j]] = phi[i] * prime[j];
break;
} else phi[i * prime[j]] = phi[i] * (prime[j] - 1);
}
}
}
} using namespace Number;
int main () {
Sieve ();
int n, m; cin >> n >> m;
ll res = 0;
for ( int i = 1; i <= min (m, n); i ++ ) {
res += (ll)(m / i) * (n / i) * phi[i];
}
cout << res * 2 - (ll)n * m << endl;
}
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
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