牢房問題 C (尋找總因子數為奇數的數)

2021-10-14 03:39:19 字數 998 閱讀 1202

某國王對囚犯進行大赦,讓一獄吏n次通過一排鎖著的n間牢房,每通過一次,按所定規則轉動n間牢房中的某些門鎖, 每轉動一次, 原來鎖著的被開啟, 原來開啟的被鎖上;通過n次後,門鎖開著的,牢房中的犯人放出,否則犯人不得獲釋。

轉動門鎖的規則是這樣的,第一次通過牢房,要轉動每一把門鎖,即把全部鎖開啟;第二次通過牢房時,從第二間開始轉動,每隔一間轉動一次;第k次通過牢房,從第k間開始轉動,每隔k-1 間轉動一次;問通過n次後,哪些牢房的鎖仍然是開啟的?

分析

轉動門鎖的規則可以有另一種理解,第一次轉動的是編號為1的倍數的牢房;第二次轉動的是編號為2的倍數的牢房;第三次轉動的是編號為3的倍數的牢房;……則獄吏問題是乙個關於因子個數的問題。

令d(n)為自然數n的因子個數,這裡不計重複的因子,如4的因子為1,2,4共三個因子,而非1,2,2,4。則d(n)或為奇數,或為偶數,見下表:

數學模型1:d(n)有的為奇數,有的為偶數,由於牢房的門開始是關著的,這樣編號為i的牢房,所含1——i之間的不重複因子個數為奇數時,牢房最後是開啟的;反之,牢房最後是關閉的。

再此基礎上我們發現當且僅當n為完全平方數時,d(n)為奇數;這是因為n的因子是成對出現的,也即當n=a*b且a≠b時,必有兩個因子a,b; 只有n為完全平方數,也即當n=a2時,才會出現d(n)為奇數的情形

我們把數分為1 質數 不是質數 1只有一次 質數因為都為本身和1相乘所以必為偶數次 非質數則也可構成由兩個數相乘但只有當乙個數為完全平方數時會有兩個因子相同則總因子數為奇數

只需找出小於n的平方數即可answer:

#includeusing namespace std;

int main()

return 0;

}

尋找自冪數(C )

include include using namespace std intmain if sum i 邏輯值表達為true時,表示自冪數 cout 求n位自冪數,請輸入位數 cin n cout 思路拓展 如果一種計算會被破壞 或改變 某個變數的值,而這個原始值在後面計算中又要被使用,那就將其賦...

問題 尋找三位數

演算法提高 尋找三位數 時間限制 1.0s 記憶體限制 512.0mb 問題描述 將1,2,9共9個數分成三組,分別組成三個三位數,且使這三個三位數構成 1 2 3的比例,試求出所有滿足條件的三個三位數。例如 三個三位數192,384,576滿足以上條件。輸入格式 無輸入檔案 輸出格式 輸出每行有三...

C語言簡易程式設計 20 尋找完數

無意中發現了乙個巨牛巨牛的人工智慧教程,忍不住分享一下給大家。教程不僅是零基礎,通俗易懂,小白也能學,而且非常風趣幽默,還時不時有內涵段子,像看 一樣,哈哈 我正在學習中,覺得太牛了,所以分享給大家。點這裡可以跳轉到教程!題目 乙個數如果恰好等於它的因子之和,這個數就稱為 完數 例如6 1 2 3....