嘻嘻,被我秒了
D - FizzBuzz Sum Hard (atcoder.jp)
题意:
思路:
直接等差数列求和算贡献!
注意求要求lcm而不是A*B,不然会爆ll
lcm也要先除再乘,不然也会爆ll
Code:
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mxn=2e5+10;
int N,A,B;
int lcm(int x,int y){
return x/__gcd(x,y)*y;
}
signed main(){
cin>>N>>A>>B;
int k1=N/A;
int k2=N/B;
int k3=N/lcm(A,B);
int S1=A*k1+k1*(k1-1)/2*A;
int S2=B*k2+k2*(k2-1)/2*B;
int S3=lcm(A,B)*k3+k3*(k3-1)/2*lcm(A,B);
int ans=N*(N+1)/2-S1-S2+S3;
cout<<ans<<'\n';
}