題目描述:求500萬以內的親合數
一:親合數概念
如果兩個數a和b, a的所有真因子之和等於b,b的所有真因子之和等於a,則稱a,b是一對親和數。
例如220和284:
220的真因子是:1、2、4、5、10、11、20、22、44、55、110;
284的真因子是:1、2、4、71、142。
以sum[i]表示i的所有真因子之和,所以:
sum[220] = 1+2+4+5+10+11+20+22+44+55+110= 284
sum[284] =1+2+4+71+142 = 220
二:思路
考慮用sum[i]表示i的所有真因子之和,所以sum為5000000大小的陣列。所以該題的關鍵就是求解sum陣列。
如果考慮某個數i有哪些因子,則比較複雜,可以反過來考慮,對於i來說,哪些數是它的倍數?i的倍數有2*i, 3*i, ..., x*i。所有這些數的因子中都包含i。單純用語言不好描述,直接看**。
三:**
#define maxnum 5000000
int*sum = null;
inti, j;
sum= malloc((maxnum+10) * sizeof(int));
//因為
1是所有數的因子,所以,首先初始化
sum陣列的元素為
1.for(i= 1; i <= maxnum; i++)
//i表示各個因子,從2開始,一直到(maxnum/2)為止,因為maxnum以內的數,不可能具有因子超過(maxnum/2)的。對於數
x,如果它具有因子
y,則是
x = dy
,如果y != x
,則最大因子
y,是在
d=2的時候取得的。
for(i= 2; 2*i <= maxnum; i++)
} //開始掃瞄sum陣列,求得親合數
for(i= 1; i <= maxnum; i++)
} } } (
09求500萬以內的親合數
題目描述 求500萬以內的親合數 一 親合數概念 如果兩個數a和b,a的所有真因子之和等於b,b的所有真因子之和等於a,則稱a,b是一對親和數。例如220和284 220的真因子是 1 2 4 5 10 11 20 22 44 55 110 284的真因子是 1 2 4 71 142。以sum i ...
輸出500以內的所有親密數
1 程式中既要有for迴圈也要有while或do while迴圈 2 在輸出每對親密數時,小數在前 大數在後,並去掉重複的親密數對,例如 220和284是一對親密數,而284和220也是一對親密數,只輸出220和284這對 親密數 3 輸出要有文字說明。輸出時每對親密數用一對圓括號括起來,兩數間逗號...
python指令碼11 求10萬以內所有素數
求10萬以內所有素數 num int input strs for i in range 2,num for c in range 2,int i 0.5 1 if i c 0 break else strs str i print strs 方法2 print 2 for i in range 3...