對於給定的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適用。在網上找了找,學會了計...