rt,题目在此。 我的代码:
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
LL lcm(LL a,LL b) { return a/__gcd(a,b)*b; }
int main() {
// freopen("1.in","r",stdin);
// freopen("1.out","w",stdout);
int T; cin >> T;
while(T--) {
LL n,a,b; cin >> n >> a >> b;
LL amod = n - (n / a * a),bmod = n - (n / b * b),abmod = n - (n / lcm(a,b) * lcm(a,b));
if(amod == 0) amod = a;
if(bmod == 0) bmod = b;
if(abmod == 0) abmod = lcm(a,b);
LL asum = (a + n - amod) * ((n-amod) / a) / 2;
LL bsum = (b + n - bmod) * ((n-bmod) / b) / 2;
LL absum = (lcm(a,b) + n - abmod) * ((n-abmod) / lcm(a,b)) / 2;
cout << asum + bsum - absum << endl;
}
return 0;
}
这个虽然正确性没问题,但是我们现在想制作强力数据,也就是题目中的 Subtest 3,在 T 约等于 5×104 的情况下,程序跑不动了。
原先我们预计时间复杂度是 O(T),现在看来常数非常大,求解决方案!已经把取模换掉了。