演算法入門經典第二版第10章uva1635

2021-07-24 07:41:34 字數 1058 閱讀 3530

題目描述

對於給定的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...