這是一道作業題.
參考的是stackoverflow的第3個回答, 這個方法非常好, 據同學在群裡說, 用那種遍歷到sqrt(n)的辦法, 需要將近一分鐘. r速度是很慢的, 但是得到這個結果不到0.1s.
其實核心思路很簡單: 從小到大的素數, 如果i是n的因子, 就一直除以i, 直到n不再包含因子i. 那麼之後最小的因子都一定大於i.
這個回答加了一點優化: 素數一定是6n-1或者+1. 但這並不是關鍵. 優化意義不大, 大概減少了1/3的時間(6個數, 如果+=2, 是3次, 這裡變成了2次).
time1=sys.time()
num=600851475143
if(num%%3==0)
}six_m=6
sqrt_n=floor(sqrt(num))
while(six_m-1<=num)
} tmp=six_m+1
if(num%%tmp==0)
} six_m=six_m+6
}time2=sys.time()
print(time2-time1)
print(max_f)
我開始犯了乙個錯誤, 把上限寫成了floor(sqrt(num)), 這顯然不對, 比如14最大素因子是7. 我有這個潛意識, 大概是因為很早以前做因數分解留下的印象吧.
複雜度分析
簡單分析一下, sqrt(num)那種方式, 複雜度是o(sqrt(n)), 這種方式複雜度是o(log(n)), 顯然強得多.
尋找崩潰的真相
2003 年 10 月 如何開發 web 應用呢?有幾種人,採用幾種不同的方法 第一種人 寫程式 一行行寫 coding line by line 這種人真 老實 第二種人 抄程式 最常使用的動作是複製與貼上 copy paste 這種人算 聰明 第三種人 用程式 使用免費 free 的程式,這種人...
尋找缺失的數
有一組數字,從1到n,中減少了乙個數,順序也被打亂,放在乙個n 1的陣列裡 請找出丟失的數字,最好能有程式,最好演算法比較快 btw1 有很多種方法的哦,據說o n 的方法就不止一種 btw2 擴充套件問題,如果丟失了2個數字呢?btw3 一定要小心不要溢位,嗯,面試者有時候不會提醒你的 btw4 ...
尋找最小的祖先
題目 給定乙個binary search tree 和兩個節點,尋找這兩個節點的最小公共祖先。首先要盡快給出最直接的辦法,不要管效率的問題。可以利用額外的儲存空間來解決這個問題,先用dfs分別尋找到這兩個元素,並且記錄下尋找過程中遍歷的元素,得到兩個陣列。然後挨個比較陣列中的元素,直到出現不同的為止...