因式分解與完美數

2021-10-01 15:23:11 字數 1148 閱讀 8074

1.1怎樣因式分解?

求出小於該數的所有質數,看是不是可以被該數整除,從而完成因式分解。

(ps:再求n的所有質數時用sqrt()函式,只需要迴圈嘗試 ≤ sqrt(n)的數就行,減少迴圈次數)

另外,每找到乙個因子i,要把n變成n/i,以保證繼續找下乙個因子,正確分解。

2.1.何為完美數?

如果有一數n,其真因數(proper factor,包括1但不包括這個數本身的約數)的總和等於n,則稱之為完美數(perfect number)。

2.2.求解思路:

定義乙個sum,在迴圈求因數時,每得到乙個因數就加到sum裡,當所有因數求完後,即得到了因數的總和,此時判斷是否等於該數即可。

#include

#include

#include

intmain()

//主函式

void

fenjie

(int n)

if(j>k)

}//求出所有的小於n的質數,並且存放的指標m中

printf

("%d="

,n);

int k=0;

l=0;while

(m[l]

*m[l]

<=n)

else l++;}

printf

("%d\n"

,n);

}//質數表求該數字的因子

void

perfect()

}}

printf

("\b "

);

注意!這裡\b後面有個空格,因為\b只是退格,不會刪除最後乙個+,需要乙個空格(" ")來覆蓋,才能達到消去最後乙個 + 的目的。

另外,也可以用陣列

每找到乙個符合條件的完美數,就輸入陣列中a[i],同時計數int j=1,j++。

這樣最後一共找到了 j 個數,只需要前 j - 1 個數輸出為%d+ ,最後乙個數輸出為%d

例項演示

素數表 因式分解 完美數

素數即質數,指在大於1的自然數中,除了1和此整數自身外無法被其它自然數整除的數。該方法用於驗證乙個數是否為素數。例求x是否為素數,只需要驗證1到中是否存在乙個數字x的約數,即能被x整除。該方法用於高效的求出小於任何數n的所有素數。該方法的原理為先用乙個篩子存放所有的數,顯然其中最小的為2且為質數,這...

階乘因式分解

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 給定兩個數n,m,其中m是乙個素數。將n 0 n 2 31 的階乘分解質因數,求其中有多少個m。注 為求冪符號。輸入 第一行是乙個整數s 0 輸出輸出m的個數 樣例輸入 3 100 5 16 2 1000000000 13 樣例...

因式分解總結

因式分解其實是乙個很簡單的應用,這裡做一下小小的總結 計算乙個數的所有因子 這裡只需要找到這個數的平方根的因子,然後再用該數分別除以每個因子,就會找到每個因子對應的另乙個因子 int a 10000 num 0 儲存n的因子 void factor int n a中從0到num 1儲存了n的所有因子...