题意
题意很简单:给定 n , a , b {n,a,b} n,a,b,求 [ 1 , n ] {[1,n]} [1,n] 以内除去 a {a } a 或 b {b} b 的倍数的数,剩余的数之和。
思路
应该是用了容斥原理。
即
a
n
s
=
s
u
m
(
n
)
−
∑
A
的
倍
数
−
∑
B
的
倍
数
+
∑
A
B
的
L
C
M
的
倍
数
=
s
u
m
(
n
)
−
(
A
+
2
A
+
.
.
.
+
n
A
A
)
−
同
理
=
s
u
m
(
n
)
−
s
u
m
(
n
A
)
⋅
A
−
同
理
\begin{aligned} ans &= sum(n) - \sum{A的倍数} - \sum{B的倍数} + \sum{AB的LCM的倍数} \\ &= sum(n) - (A + 2A +...+\frac{n}{A}A) - 同理 \\ &= sum(n) - sum(\frac{n}{A})·A - 同理 \end{aligned}
ans=sum(n)−∑A的倍数−∑B的倍数+∑AB的LCM的倍数=sum(n)−(A+2A+...+AnA)−同理=sum(n)−sum(An)⋅A−同理
不过暴力刚好卡过
代码
int f(int x) {
return (1 + x) * x / 2;
}
void solve() {
int n, a, b; cin >> n >> a >> b;
int l = lcm(a, b);
int res = 0;
cout << f(n) - a * f(n / a) - b * f(n / b) + l * f(n / l) << endl;
}