题目:
题目大意:
输入a,b,c,d,在a ~ b, c ~ d中选两个数,使两数相乘是2018的倍数,输出情况数。
代码:
#include<bits/stdc++.h>
using namespace std;
int main() {
long long a, b, c, d;
while (~scanf("%lld %lld %lld %lld", &a, &b, &c, &d)) {
long long numl = b - a + 1;//左边数的个数
long long numr = d - c + 1;//右边数的个数
long long numl2 = (b - a) / 2;//左边偶数个数
long long numr2 = (d - c) / 2;//右边偶数个数
if (b % 2 == 0 || a % 2 == 0)numl2++;
if (c % 2 == 0 || d % 2 == 0)numr2++;
long long suml = b / 1009 - a / 1009;//左边1009
long long sumr = d / 1009 - c / 1009;//右边1009
if (a % 1009 == 0)suml++;
if (c % 1009 == 0)sumr++;
long long suml2= b / 2018 - a / 2018;//左边2018
long long sumr2= d / 2018 - c / 2018;//右边2018
if (a % 2018 == 0)suml2++;
if (c % 2018 == 0)sumr2++;
long long ans = suml * numr2 + sumr * numl2 + suml2 * numr + sumr2 * numl - suml2 * numr2 - sumr2 * numl2 - suml * sumr2 - sumr * suml2 + suml2 * sumr2;
printf("%lld\n", ans);
}
return 0;
}