組合數學-容斥原理
題意:求gcd(x,y)==k個數,其中x屬於[1,b],y屬於[1,d],其中x=5,y=7與x=7,y=5,是一樣的。
思路:求x在[1,b],y在[1,d],gcd(x,y)=k的個數
就是求x在[1,b/k],y在[1,d/k],gcd(x,y)==1的個數
不妨設b<d;i在[1,b/k]時,與其互素的數的個數就是尤拉函式,所以在[1,b/k]為phi[i]+phi[i1]+···
當i在[b/k+1,d/k]內求區間[1,b/k]內與其互素的數的個數,先求出該區間內與他不互素的數的個數即i的素因子的組合,利用容斥原理求解找出[1,b/k]中可以被i的每個質因子整除的數的個數求和,減去可以被其任意兩個質因子整除的數的個數,加上可以被其任意三個質因子整除的數的個數。。。。。。
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<iomanip> #include<vector> #include<algorithm> #include<cmath> using namespace std; typedef long long ll; const int maxn=1000005; int prim[maxn+5]; ll f[maxn+5]; ll phi[maxn+5]; void init() { for(int i=1;i<maxn;i++) phi[i]=i; for(int i=2;i<maxn;i+=2) phi[i]>>=1; for(int i=3;i<maxn;i+=2) { if(phi[i]==i) { for(int j=i;j<maxn;j+=i) phi[j]=phi[j]-phi[j]/i; } } //遞推法求尤拉函式 f[1]=1; for(int i=2;i<maxn;i++) f[i]=f[i-1]+phi[i]; } ll solve(int n,int r) { int num=0; for(int i=2;i<=sqrt(n);i++) { if(n%i==0) { prim[num++]=i; while(n%i==0) n/=i; } } if(n>1) prim[num++]=n; //對n分解素因子,num是n的素因子的個數 ll sum=0; for(int msk=1;msk<(1<<num);msk++) {//(1<<sum)是一個長為num的二進位制,msk通過從1到(1<<num)迴圈可以列舉這個二進位制的每一種排列情況 ll mult=1; int bits=0; for(int i=0;i<num;i++) { if((1<<i)&msk)//表示的是msk二進位制的第i位為1 { bits++; mult*=prim[i]; } } ll cur=r/mult; if(bits&1) sum+=cur; else sum-=cur; } return r-sum; } int main() { int t,a,b,c,d,i,k,ca; ll sum; scanf("%d",&t); ca=0; init(); while(t--) { scanf("%d%d%d%d%d",&a,&b,&c,&d,&k); if(k==0) { printf("Case %d: %d\n",++ca,0); continue; } if(b>d) swap(b,d); b/=k; d/=k; sum=0; sum+=f[b]; for(i=b+1;i<=d;i++) sum+=solve(i,b); printf("Case %d: %lld\n",++ca,sum); } }
相關推薦
【組合數學 容斥原理】ICPC2014西安 F. Color
https://vjudge.net/contest/265252#problem/F 給你n朵花,m種顏色,k (1 ≤ n, m ≤ 10^9 , 1 ≤ k ≤ 10^6 , k ≤ n, m) 花是一排,要求相鄰花染色不能相同,染色數量剛好等於k,問你染色的方案數 如
BZOJ4767 兩雙手(組合數學+容斥原理)
因為保證了兩向量不共線,平面內任何一個向量都被這兩個向量唯一表示。問題變為一張有障礙點的網格圖由左上走到右下的方案數。 到達終點所需步數顯然是平方級別的,沒法直接遞推。注意到障礙點數量很少,那麼考慮容斥,即用總方案數減去經過障礙點的方案數。對每個障礙點計算其作為第一個經過的障礙點的方案數即可。
組合數學 容斥原理 學習筆記 (福利向)和Leo一起做愛數學的好孩子(未完待續
演算法競賽考得很多的部分啊 這個還是很重要的 在目前的演算法競賽中有三大計數考點 1)組合計數 2)線性計數 3)群論計數 其中群論計數比較困難,我又不知道什麼是線性計數,所以只能頹組合計數。 首先是最簡單的東西 加法原理 若完成一件事的方法有nnn類,其中第i
錯排問題 組合數學+容斥原理
3.錯排問題(problem) 【題目描述】 n本不同的書放在書架上。其中m本書已經重新擺放好,將剩下的n-m 本書也重新擺放,使每本書都不在原來放的位置。 求有幾種擺法。 【輸入資料】 第1行兩個數
組合數學——容斥原理和錯位排列
真的,學了組合數學你會克服公式恐懼症0.0深有體會…… 容斥原理 設A1,A2,…,An為有限集合,用|Ai|表示集合Ai中的元素個數那麼有這樣的結論: |A1∪A2∪…∪An|=∑i=1n|Ai|−∑1≤i<j≤n|Ai∩Aj|+∑1≤i<
組合數學-容斥原理
題意:求gcd(x,y)==k個數,其中x屬於[1,b],y屬於[1,d],其中x=5,y=7與x=7,y=5,是一樣的。 思路:求x在[1,b],y在[1,d],gcd(x,y)=k的個數 就是求x在[1,b/k],y在[1,d/k],gcd(x,
bzoj 4710(組合數學+容斥原理)
傳送門 題解: 先介紹一條公式:將n個物品分給m個人有C(n+m-1,m-1)種方案。但是這些方案是包括了不合法的(有些人沒有獲得任何物品)。對於這道題,需要保證所有人都分到物品,所以容斥原理解決:
UVa 11481 Arrange the Numbers (組合數學+容斥原理)
UVa 11481 Arrange the Numbers 題目大意: 可以將序列1,2,3,...n任意重排,但重排後的前m(m≤n)個位置恰好有k(k≤m)個不變,求方案數除以1000000
組合數學-容斥原理-求指定區間內與n互素的數的個數
求指定區間內與n互素的數的個數 給出整數n和r。求區間[1,r]中與n互素的數的個數。 去解決它的逆問題,求不與n互素的數的個數。 考慮n的所有素因子pi(i=1···k) 在[1,r]中有多少數能被pi整除呢?它就是 然而,如果我們單純將所有結果,會得到錯誤答案。有些
【專題】計數問題(排列組合,容斥原理,卡特蘭數)
spl 狀態 ans 補集 方便 常用 括號 inf 不存在 ---下面都是學習的筆記,還沒有整理,比較淩亂,有需自取吧。--- 【排列組合】 <加法原理>做一件事情有n個方法,第i個方法有pi種方案,則一共有p1+p2+...+pn種方案。 <乘法原理&
UVA 11806 組合數學+容斥
rac pen NPU set auto cas clip .org one UVA: https://vjudge.net/problem/UVA-11806 題意:給你一個n×mn×m的矩陣網格和kk個人,問有多少種方法使得每一個格子只放一個人,並且第一行,最後一行,第
CF451E Devu and Flowers (組合數學+容斥)
題目大意:給你$n$個箱子,每個箱子裡有$a_{i}$個花,你最多取$s$個花,求所有取花的方案,$n<=20$,$s<=1e14$,$a_{i}<=1e12$ 容斥入門題目 把取花想象成往箱子裡放花,不能超過箱子上限 $n$很小,考慮狀壓 如果去掉$a_{i}$的限制,我們取物品的
[CQOI2014]數三角形 題解(組合數學+容斥)
[CQOI2014]數三角形 題解(數論+容斥) 標籤:題解 閱讀體驗:https://zybuluo.com/Junlier/note/1328780 連結題目地址:洛谷P3166 BZOJ 3505 思想還是很巧妙的。。。(對於我這種菜雞) 理解題意 首先它說\(n×m\)的網格,實際上是有\((
BZOJ4710: [Jsoi2011]分特產【組合數學+容斥】
Description JYY 帶隊參加了若干場ACM/ICPC 比賽,帶回了許多土特產,要分給實驗室的同學們。 JYY 想知道,把這些特產分給N 個同學,一共有多少種不同的分法?當然,JYY 不希望任 何一個同學因為沒有拿到特產而感到失落,所以每個同學都必須至少分得一個特產。 例如,JYY 帶來了2
bzoj 4517: [Sdoi2016]排列計數【容斥原理+組合數學】
沒有 原理 getchar() display del d+ getchar esp const 第一個一眼就A的容斥題! 這個顯然是容斥的經典問題------錯排,首先考慮沒有固定的情況,設\( D_n \)為\( n \)個數字的錯排方案數。 \[ D_n=n!-\su
Codeforces 451 E. Devu and Flowers(組合數學,數論,容斥原理)
傳送門 解題思路: 假如只有 s 束花束並且不考慮 f ,那麼根據隔板法的可重複的情況時,這裡的答案就是 假如說只有一個 f 受到限制,其不合法時一定是取了超過 f 的花束 那麼根據組合數,我們仍然可以算出其不合法的解共有: 最後,由於根據容斥,減兩遍的東西要加回來,那麼含有偶數個 f 的項
BZOJ4710 JSOI2011分特產(容斥原理+組合數學)
顯然可以容斥去掉每人都不為空的限制。每種物品分配方式獨立,各自算一個可重組合乘起來即可。 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include&
BZOJ4559 JLOI2016成績比較(容斥原理+組合數學+斯特林數)
容斥一發改為計算至少碾壓k人的情況數量,這樣對於每門課就可以分開考慮再相乘了。剩下的問題是給出某人的排名和分數的值域,求方案數。枚舉出現了幾種不同的分數,再列舉被給出的人的分數排第幾,算一個類似斯特林數的東西即可。後一部分與碾壓幾人是無關的,預處理一下,複雜度即為三方。當然和四方跑得也差不多快。 資
[BZOJ4710][Jsoi2011]分特產(容斥原理+組合數學)
題目描述 傳送門 題解 這道題的限制其實挺不明顯的,應該是“每個人都至少有一個” 也就是說對於所有的物品,將其劃分成n部分,每部分不能為空,問總的方案數 可以如果利用插板法的話,把n個相同的小
組合數學:容斥原理及其應用
容斥原理 例題:從1到1000中不能被5,6,8整除的整數個數。 令P1具有被5整除的性質,P2具有被6整除的性質,P3被8整除性質。 S是前1000個正整數的集合希望求出三個性質同時不滿足的個數 |A1| = floor(1000/5) = 200;|A2| =