這段藍色代碼是什么原理,一直看不懂
uj5u.com熱心網友回復:
c = gcd(a, b); // c是a與b的最大公約數,可以被a、b整除b = b / c; // 求b除以最大公約數,剩下的因子
if (c % b == 0) // 如果剩下的因子可以被最大公約數整除
這個邏輯有點看不懂,
比如 a = 10, b = 8, b的所有質數因子是三個2呢,還是一個2呢?程式運行輸出是No,
比如 a = 12, b = 8, b的所有質數因子是三個2呢,還是一個2呢?程式運行輸出是Yes,
如果a包含所有b可重復的質數因子,直接就是a是否可以整除b,
如果a包含b不重復的質數因子, 在b = b / c;這句,計算出b剩余的質數因子
uj5u.com熱心網友回復:
這個很好理解。你應該明白什么是最大公約數。就是a/b 所有共有的質數乘積, 假如a 包含b的質數, 那么最大公約數必定包含了b的所有質數。b=b/c 就是把最大公約數的質數去除,剩下的部分分解得到的質數,也在c里面。如果不再,就肯定不符合要求
比如 6 和 4 ,最大公約數 是2 , 替代到程式里面就行了,如果4變成10 ,就不行。
不過這個程式還是有點問題,代碼的前提是質數的值不能超過2次方,比如程式就無法處理 a=6 和 b=8的情況,但顯然這兩個數是符合題目的,但程式會判斷為False.
uj5u.com熱心網友回復:
哇謝謝大佬!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/224626.html
標籤:C++ 語言
上一篇:請問字串陣列用scanf寫入時提示訪問沖突是什么原因?
下一篇:C語言問題求解答
