[Vijos 1629] 八 · 容斥原理

求[a,b]中能被8整除但不能被给定n个数整除的数的个数,转化为分别求[1,a-1]和[1,b]中的数的个数。

然后首先在区间[1,x]中能被8整除的数的个数是x/8,但是有的是不符合要求的。

要求不能被给定的n个数整除,我们就把能被这n个数整除的同时又能被8整除的数去掉。

原本是奇加偶减,但是一开始选取了一个8,所以反过来 ,具体见代码。

#include 
#include 
#include 
using namespace std;
#define ll long long

ll a[16],n,m,x,y;
ll ans;

ll gcd(ll a,ll b){
	ll r;
	while (b){
		r=a%b;
		a=b;
		b=r;
	}
	return a;
}

ll calc(ll x){
	ll ret=x/8;	
	for (int i=1;i


你可能感兴趣的:(Vijos,容斥原理)