2018只有1,2,1009,2018四个因子
容斥原理:2018只有1,2,1009,2018四个因子(1n,2018m)(2n,1009m)(2n,2018m)(1009n,2m)(1009n,2018m)(2018n,1m)(2018n,2m)(2018n,1009m)(2018n,2018m)这九个组合,然后去除一些重复的就可以了。
(2018n,2m)(2018n,1009m)(2018n,2018m)包含于(2018n,1m);
(2n,2018m)包含于(1n,2018m);
(1009n,2018m)包含于(1009n,2m);
(1n,2018m)于(2n,1009m)有(2n,2018m)的重复项;
(1n,2018m)于(1009n,2m)有(1009n,2018m)的重复项;
(2018n,1m)有重复项(2018n,1009m),(2018n,2m),(2018n,2018m)而(2018n,2018m)包含于(2018n,2m);(2018n,1009m)于(2018n,2m)有重复项(2018n,2018m)。
#include<stdio.h>
int main()
{
long long a,b,c,d;
while(scanf("%lld%lld%lld%lld",&a,&b,&c,&d)!=EOF){
long long x[4],y[4];
x[0]=b-a+1;
y[0]=d-c+1;
x[1]=b/2-(a-1)/2;
y[1]=d/2-(c-1)/2;
x[2]=b/1009-(a-1)/1009;
y[2]=d/1009-(c-1)/1009;
x[3]=b/2018-(a-1)/2018;
y[3]=d/2018-(c-1)/2018;
long long num=0;
num=num+x[0]*y[3];
num=num+x[1]*(y[2]-y[3]);
num=num+x[2]*(y[1]-y[3]);
num=num+x[3]*y[0]-x[3]*y[1]-x[3]*y[2]+x[3]*y[3];
printf("%lld\n",num);
}
}