BJTU 懶羊羊喫青草

題面描述

懶羊羊是一隻非常能喫的羊,它在青青草原上發現一塊巨大的正方形草地,但灰太狼已經搶先一步在草地上佈下了若干陷阱。正方形草地位於直角座標系中,左下角座標爲 (1, 1) ,右上角座標爲 (m, m) ,草地內只有整數座標點上才長有青草。懶羊羊發現,對於一棵座標爲 (x, y) 處的青草,只有 (x*y) Mod m>0 時,草旁邊纔有一個陷阱, Mod 爲取餘數操作。

聰明的你是否能幫懶羊羊算一算,這塊草地上共有多少陷阱。

輸入數據

輸入數據的第一行爲一個正整數 T(T<=50) ,表示測試數據的組數。接下來是 T 行測試數據,每行中有一個整數 m(m<=100000) 。

輸出數據

對於每一組測試數據,輸出一行” Case id: M ”,表示第 id 組測試數據結果爲, id 從 1 開始。

樣例輸入

 

5
1
3
4
6
1403

 

樣例輸出

 

Case #1: 0
Case #2: 4
Case #3: 8
Case #4: 21
Case #5: 1962964

 

解題思路

       通過觀察發現,無論某行(某列),陷阱的個數  =  某行總數(某列總數) 減去   某行總數(某列總數)和行序號(列序號)最大公約數。那麼,兩層for循環就變成了一層,避免了超時的問題。

示例:

第i行(列)的陷阱個數爲:m - gcd(m , i);

 

程序代碼如下

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章