数论——容斥及例题(待更新)

先推荐一篇博客: 容斥原理详解

应用:
一:概率论是容斥原理的直接表现,代代公式就可以了。

二:与排列组合结合,如:(0,1,2)序列问题,方程整数解问题。

三:求指定区间内与n互素的数的个数——区间互素数个数

下面部分代码:

求区间[1,r]中与n互素的数的个数
int vc(int n,int r){
    
    
	int sum=0;
	vector<int>p;
	for(int i=2;i*i<=n;i++){
    
    
		if(n%i==0){
    
    
			p.push_back(i);
			while(n%i==0)	n/=i; 
		}
	}
	if(n>1)	p.push_back(n);
	for(int k=1;k<(1<<p.size());k++){
    
    
		int t=1,j=0;
		for(int i=0;i<p.size();i++){
    
    
			if(k&(1<<i)){
    
    
				j++;
				t*=p[i];
			}
		}
		int cur=r/t;
		if(j&1)	sum+=cur;
		else	sum-=cur;
	}
	return r-sum;
}

猜你喜欢

转载自blog.csdn.net/weixin_45606191/article/details/108566704