題目描述
對於給定的n個數a 1 , a 2 ,…, a n ,依次求出相鄰兩數之和,將得到乙個新數列。重複上述
操作,最後結果將變成乙個數。問這個數除以m的餘數與哪些數無關?例如n=3,m=2時,第
一次求和得到a 1 +a 2 ,a 2 +a 3 ,再求和得到a 1 +2a 2 +a 3 ,它除以2的餘數和a 2 無關。
1≤n≤1e5 ,2≤m≤1e9 。
自己手動模擬幾下可以看出和楊輝三角有關。
c(k,n)直接計算太大
通過唯一分解定理,先求出m的所有素因子對應的冪
利用公式
c(k, n) = (n - k + 1)/k * c(k-1,n)
遞推,並且求出每乙個k對應的素因子的冪,如果有乙個素數,素因子對應的冪小於m對應素因子冪,則說明不會是m的倍數,標記一下即可。
說的不清楚,還是要仔細閱讀原始碼。
tip:通過本題,可以總結出判斷乙個數是否能整除m,可以利用唯一分解定理,通過素數的冪來判斷。
#include#include#include#includeusing namespace std;
const int maxn = 100000 + 5;
int bad[maxn];
void prime_factors(int n,vector& primes)
}if(n > 1) primes.push_back(n); // n本身就是乙個素數
}int main(){
int n,m,kase = 0;
while(cin>>n>>m){
vectorprimes;
prime_factors(m,primes);
memset(bad,0,sizeof(bad));
n--; //從c(nm)是從0開始的,所以n--
for(int i=0;ians;
for(int k=1;k
演算法競賽入門經典(第二版)第2章習題
2.4.1 輸出技巧 include intmain 習題2 2 水仙花數 daffodil 輸出100 999中的所有水仙花數。若3位數abc滿足abc a 3 b 3 c 3,則稱其為水仙花數。include intmain return 0 習題2 3 韓信點兵 hanxin 相傳韓信才智過人...
演算法競賽入門經典(第二版)第2章部分學習實現
input如下 1 34 5 0output如下 49 要求 一次性輸入,一次性輸出 用fstream實現 include include using namespace std int main string line str file buff.seekg 0 while getline fil...
演算法競賽入門經典(第二版) 習題
習題2 5 include int main if 10 n b 10 b 5 確定末位四捨五入的情況 printf d 10 n b 1 else printf d 10 n b return 0 注意 要及時輸出,防止n越界 習題2 6 include void result int num,i...