今天主要看了容斥
容斥原理 :重要應用 求出乙個數n在區間[1,m]裡面有多少個數與它互質。假設資料不超過int型。
實現過程分為兩步:
1, 求出m的質因子 並儲存在陣列裡面;
2, 求出區間[1,n]裡面有多少個數與m不互質。
**:
#include
#include
int p[10];//儲存質因子 int型n不會超過10個
int k;//記錄質因子個數
void getp(int n)//求出n的質因子
}
if(n > 1) p[k++] = n;//本身是質數
}
int nop(int m)//求出區間[1,m]裡面有多少個數與n不互質
}
int sum = 0;//統計個數
for(i = 1; i < top; i++)
sum += m / que[i];
return sum;
}
int main()
return 0;
}
上面的**實現是很簡單的,也是很好理解的。 網上還有dfs版本,位運算版本的以及遞迴版本的,這裡再給個遞迴的(另外本人理解不太透徹),至於其它兩個有興趣的可以上網查下。
遞迴版本:
#include
#include
int p[10];//儲存質因子 int型n不會超過10個
int k;//記錄質因子個數
void getp(int n)//求出n的質因子
}
if(n > 1) p[k++] = n;//本身是質數
}
int nop(int m, int t)//求出區間[1,m]裡面有多少個數與n不互質
int main()
return 0;
}
訓練日記8 14
今天做了幾個佇列的,真的爽額,花了差不多一上午的時間看例題,弄什麼是單調佇列,這個問題真的很嚴重。做了乙個移動窗戶問題之後,看了乙個給你乙個樹狀圖,求最大矩形面積的問題,直接做的話 o n2 而佇列能的時間的複雜度降到o n 初次接觸這種方法,感覺這個方法很溜,當然讓人也是很炸,光是求最大的矩形面積...
訓練日記 20161024
初賽好像不會掛了,好開心!版權原因,不上傳題目。題意 求1 n n 1000 的排列中逆序對恰好為 k 個的排列數目。多測。題解 f i j 表示前 i 個數,逆序對個數恰好為 j的排列個數,易得轉移方程f i j i 1k 0f i 1 j k 用字首和優化可使複雜度降為o n2 題意 對於乙個長...
訓練日記 20170324
長久不更新部落格了。期間經歷了恰好被ag線踩的wc,經歷了漫長痛苦的小高考準備。現在終於可以重整旗鼓,向省選進發!幾個月來,唯一不變的是我仍然是個超級蒟蒻 版權原因,不上傳題目。題意 最小樹形圖 去年就接觸 聽說 過的演算法,一直沒有真正寫過。因為各種奇怪的細節錯誤,調了好幾個小時 比如找環時沒有判...