09求500萬以內的親合數

2021-07-03 05:42:20 字數 1085 閱讀 5471

題目描述:求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...