歷屆試題 矩陣翻硬幣
時間限制:1.0s 記憶體限制:256.0mb
問題描述
小明先把硬幣擺成了乙個 n 行 m 列的矩陣。
隨後,小明對每乙個硬幣分別進行一次 q 操作。
對第x行第y列的硬幣進行 q 操作的定義:將所有第 i*x 行,第 j*y 列的硬幣進行翻轉。
其中i和j為任意使操作可行的正整數,行號和列號都是從1開始。
當小明對所有硬幣都進行了一次 q 操作後,他發現了乙個奇蹟——所有硬幣均為正面朝上。
小明想知道最開始有多少枚硬幣是反面朝上的。於是,他向他的好朋友小m尋求幫助。
聰明的小m告訴小明,只需要對所有硬幣再進行一次q操作,即可恢復到最開始的狀態。然而小明很懶,不願意照做。於是小明希望你給出他更好的方法。幫他計算出答案。
輸入格式
輸入資料報含一行,兩個正整數 n m,含義見題目描述。
輸出格式
輸出乙個正整數,表示最開始有多少枚硬幣是反面朝上的。
樣例輸入
2 3樣例輸出 1
資料規模和約定
對於10%的資料,n、m <= 10^3;
對於20%的資料,n、m <= 10^7;
對於40%的資料,n、m <= 10^15;
對於10%的資料,n、m <= 10^1000(10的1000次方)。
#include#include#includeusing namespace std;
//兩個字串相乘
string strmultiply(string str1 , string str2)
; int i = 0, j = 0;
for(i = 0; i < len1; i++)
}// puts("");
for(i = 0; i < len1 + len2; i++)
for(i = len1 + len2 - 1; i >= 0 ; i--)
for(j = i; j >= 0; j--)
return strresult;
}//str1 * 10^pos後(即在str1後添上pos個0),與str2作比較
int compare(string str1, string str2, int pos)
return 0;
}//對大數str開方取整
string sqrtlarge(string str)
if(9 == j) strresult += '9';}}
}else
if(9 == j) strresult += '9';}}
}return strresult;
}int main()
藍橋杯 PREV 34 矩陣翻硬幣
題目 矩陣翻硬幣 鏈結 問題描述 小明先把硬幣擺成了乙個 n 行 m 列的矩陣。隨後,小明對每乙個硬幣分別進行一次 q 操作。對第x行第y列的硬幣進行 q 操作的定義 將所有第 i x 行,第 j y 列的硬幣進行翻轉。其中i和j為任意使操作可行的正整數,行號和列號都是從1開始。當小明對所有硬幣都進...
藍橋杯 PREV 34 矩陣翻硬幣(大數)
prev 34 矩陣翻硬幣 思路 1.由題意可知,將所有硬幣都進行一次q操作後,被翻轉奇數次的硬幣是反面朝上的 2.定義f x f x f x 為正整數x xx的約數個數,那麼座標為 a,b a,b a,b 的硬幣會被翻轉f a f b f a f b f a f b 次,我們知道只有奇數乘以奇數結...
矩陣翻硬幣
問題描述 小明先把硬幣擺成了乙個 n 行 m 列的矩陣。隨後,小明對每乙個硬幣分別進行一次 q 操作。對第x行第y列的硬幣進行 q 操作的定義 將所有第 ix 行,第 jy 列的硬幣進行翻轉。其中i和j為任意使操作可行的正整數,行號和列號都是從1開始。當小明對所有硬幣都進行了一次 q 操作後,他發現...