互滿數及優化

2021-10-22 01:30:36 字數 823 閱讀 6464

求500萬以內的所有親和數

如果兩個不同的數a和b,a的所有真因數之和等於b,b的所有真因數之和等於a,則稱a,b是一對親和數。例如220和284,1184和1210,2620和2924。程式設計實現。

想一想這個問題,首先你要弄清楚,什麼是親和數,什麼是真因子。除了本身之外的都是所以因子都是真因子,包括1。那親和數就好比這兩個數所有真因子之和等於對方,這倆是一對,親和數。 舉例:220的真因子是:1、2、4、5、10、11、20、22、44、55、110; 284的真因子是:1、2、4、71、142。 而這兩個數恰恰等於對方的真因子各自加起來的和(sum[i]表示數i 的各個真因子的和),即220=1+2+4+71+142=sum[284],284=1+2+4+5+10+11+20+22+44+55+110=sum[220]。 即284的真因子之和sum[284]=220,and 220的真因子之和sum[220]=284,即有sum[220]=sum[sum[284]]=284。 有點意思,你看出來什麼了嗎?也就是說如果sum[sum[i]]=i,那sum[i]和i是一對親和數。接下來的問題是如何求得sum[i],這才是重點。那就要求每乙個數的真因子,運算量挺大的吧。來編碼試試吧,應該不是很難。

int main()

; //防止溢位

for(int i=1;i<=m;i++)

for(i=1;i<=m;i++)

; //防止溢位

for(int j=1;j<=m/2;j++)

for(int i=2;i<=m;i++) //從第二項開始,不能說知道了最小220,就從220開始。

時間複雜度是t(n)=o(nlgn),很nice的演算法。

這樣就搞定了!

ORACLE資料庫連線數滿的分析及優化

最近在使用oracle的過程中,出現了資料庫連線數滿的情況,導致程式及資料庫連線工具連線不上。主要從兩個方面來考慮這件事,從程式方面來看 1.進行資料庫連線操作後未釋放連線 2.若使用了資料庫連線池,則考慮連線池的超時設定。從資料庫本身來看 1.可以增加資料庫的最大連線數 2.可以定時清理資料庫中i...

Python求出10000以內的所有互滿數

如果有兩個數,每乙個數的所有除它本身的約數之和等於對方,稱這兩個數為互滿數 def fun1 num fun1 求約數並將約數存放在list1 list1 for i in range 1,num if num i 0 return list1 for num1 in range 1,10000 l...

mysql cpu 100 滿 優化方案

解決mysql cpu占用100 的經驗總結 karl han的專欄 csdn部落格 mysql伺服器 io 100 的分析與優化方案 hello katty的專欄 csdn部落格 mysql伺服器cpu跑滿100 的情況分析 qq 36663951的部落格 csdn部落格 mysql 效能優化方案...