題面描述
懶羊羊是一隻非常能喫的羊,它在青青草原上發現一塊巨大的正方形草地,但灰太狼已經搶先一步在草地上佈下了若干陷阱。正方形草地位於直角座標系中,左下角座標爲 (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 |
樣例輸出
Case #1: 0 |
解題思路
通過觀察發現,無論某行(某列),陷阱的個數 = 某行總數(某列總數) 減去 某行總數(某列總數)和行序號(列序號)最大公約數。那麼,兩層for循環就變成了一層,避免了超時的問題。
示例:
第i行(列)的陷阱個數爲:m - gcd(m , i);
程序代碼如下