C 組合數例題 無關的元素

2021-09-13 01:11:10 字數 1091 閱讀 1591

對於給定的n個數a1,a2,...,an,依次求出相鄰兩數之和,將得到乙個新數列。重複上述操作,最後結果將變成乙個數。問這個數除以m的餘數與哪些數無關?

例如n=3,m=2時,第一次求和得到a1+a2,a2+a3,再次求和得到a1+2a2+a3,它除以2的餘數和a2無關。

輸入

第1行:2個整數n和m(1<=n<=10^5, 2 <=m<=10^9)

輸出

按公升序列出與m無關的元素的序號,每行1個。

若與全部元素都有關,輸出0

樣例輸入

5 3
樣例輸出

3
經過計算可以發現,在最後的表示式中,a1~an的係數就是楊輝三角第n行的數,而我們知道楊輝三角第n行第k個數就等於c(n-1,k-1)。因為c(n-1,0)和c(n-1,n-1)同楊輝三角每一行首尾兩個數一樣是1,所以不用管它們。那麼就需要找c(n-1,1)~c(n-1,n-2)中可以被m整除的數。(以下的n和k都沒有-1,但是影響不大,**中算n-1、k-1就行)

由公式所以

把每個c(n,k)都表示成這種質因數分解的形式,那麼如果c(n,k)的

因為詳見**:

#include#include#include#includeusing namespace std;

int n,i,j,num[50000],cnt1[50000],cnt2[50000],ans[50000],len,l;

long long m;

inline void fenjie()

}if(m>1)num[++len]=m,cnt1[len]=1;

}inline bool ac(int n,int k)

while(y%num[i]==0&&y)

}for(int i=1;i<=len;i++)

if(cnt1[i]>cnt2[i])return 0;

return 1;

}int main()

學校OJ 組合數學 無關的元素

時間限制 1 sec 記憶體限制 128 mb 提交 193 解決 42 提交 狀態 我的提交 對於給定的n個數a1,a2,an,依次求出相鄰兩數之和,將得到乙個新數列。重複上述操作,最後結果將變成乙個數。問這個數除以m的餘數與哪些數無關?例如n 3,m 2時,第一次求和得到a1 a2,a2 a3,...

紫書 例題10 6 無關的元素 UVa1635

題意 給定n個數a1,a2 an,依次求出相鄰兩個數值和,將得到乙個新數列,重複上述操作,最後結果將變為乙個數,問這個數除以m的餘數與那些數無關?例如n 3,m 2時,第一次得到a1 a2,a2 a3,在求和得a1 2 a2 a3,它除以2的餘數和a2無關。1 n 10 5,2 m 10 9 分析 ...

求組合數的C 實現

include iostream using namespace std intcom intn,intr returns intmain return0 上面的 只適合較小的n,經測試,當n 33 時,對於所有小於等於 n 的 m均能計算出值。n 33時,僅對於較小的m適用。在網上找了找,學會了計...