演算法 分解質因數

2021-08-10 08:35:49 字數 2187 閱讀 7449

定義

質因數(或質因子)在數論裡是指能整除給定正整數的質數。兩個沒有共同質因子的正整數稱為互質。因為1沒有質因子,1與任何正整數(包括1本身)都是互質。正整數的因數分解可將正整數表示為一連串的質因子相乘,質因子如重複可以指數表示。根據算術基本定理,任何正整數皆有獨一無二的質因子分解式。只有乙個質因子的正整數為質數。

例子 1沒有質因子。

5只有1個質因子,5本身。(5是質數。)

6的質因子是2和3。(6 = 2 × 3)

2、4、8、16等只有1個質因子:2(2是質數,4 = 2,8 = 2,如此類推。)

10有2個質因子:2和5。(10 = 2 × 5)

就是乙個數的約數,並且是質數,比如8=2×2×2,2就是8的質因數。12=2×2×3,2和3就是12的質因數。把乙個式子以12=2×2×3的形式表示,叫做分解質因數。16=2×2×2×2,2就是16的質因數,把乙個合數寫成幾個質數相乘的形式表示,這也是分解質因數。[1]

分解質因數的有兩種表示方法,除了大家最常用知道的「短除分解法」之外,還有一種方法就是「塔形分解法」。

分解質因數對解決一些自然數和乘積的問題有很大的幫助,同時又為求最大公約數和最小公倍數做了重要的鋪墊。

短除法

求乙個數分解質因數,要從最小的質數除起,一直除到結果為質數為止。分解質因數的算式的叫短除法,和除法的性質差不多,還可以用來求多個個數的公因式:

分解質因數**:

將乙個正整數分解質因數。例如:輸入90,列印出90=2*3*3*5。

程式分析:對n進行分解質因數,應先找到乙個最小的質數k,然後按下述步驟完成:

(1)如果這個質數恰等於n,則說明分解質因數的過程已經結束,列印出即可。

(2)如果n>=k,但n能被k整除,則應列印出k的值,並用n除以k的商,作為新的正整數你n,

重複執行第一步。

(3)如果n不能被k整除,則用k+1作為k的值,重複執行第一步。

01

#include "stdio.h"

02#include "conio.h"

03 main()

04

17else

18break;

19 }

20printf("%d",n);

21 getch();

22 }

另一種形式:

01//返回質因數陣列

02 integer decprime(int n)

10list.add(integer.valueof(i));

11 n = n/i;

12 }

13 }

14list.add(integer.valueof(n));

15return

list.toarray(new integer[list.size()]);

16 }

類似方法:

// 質因數.cpp : 定義控制台應用程式的入口點。  

//

#include "stdafx.h"

#include

#include

#include

using

namespace

std;

void analyse(int n)

} cout

// 質因數.cpp : 定義控制台應用程式的入口點。  

#include "stdafx.h"

#include

#include

#include

using

namespace

std;

void analyse(int n)

//cout<}

cout

複雜度 如果n<2^10 ,這種情況下試除法通常都是很有效的。但是如果用來分解更大的整數,試除法就變得非常低效甚至不可用了。這種演算法的複雜度是隨著n的增加呈指數級別增長的。

試除法是整數分解演算法中最簡單和最容易理解的演算法。

給定乙個合數n(這裡,n是待分解的整數),試除法看成是用小於等於的每個素數去試除待分解的整數。如果找到乙個數能夠整除除盡,這個數就是待分解整數的因子。

分解質因數演算法

題目 將乙個正整數分解質因數。例如 輸入90,列印出90 2 3 3 5。分析 從1到n先找出最小的質因數,如果等於本身,那麼說明只有乙個質因數,如果不是,那麼將該質因數列印出來,並將n 該質因數作為新的n值進行運算。設計步驟 1 如果這個質數恰等於n,則說明分解質因數的過程已經結束,列印出即可。2...

分解質因數演算法

以前寫的,有人問我程式的原理,在這裡解釋下 將n分解質因數 一般方法 i從2開始到sqrt n 的每乙個i由n試除,如果能整除就再判斷i是不是素數,如果是則i是n的乙個質因子,然後n n i 再將i歸位回2 再尋找n的質因子 我的優化 大致思路不變,進行了一些剪枝,首先還是i從2開始到sqrt n ...

分解質因數

質因數概念 每個合數都可以寫成幾個質數相乘的形式,這幾個質數就都叫做這個合數的質因數。如果乙個質數是某個數的因數,那麼就說這個質數是這個數的質因數。而這個因數一定是乙個質數。演算法原理 先根據需要分解的合數生成乙個質數表。然後依次從小到大依次除合數,每次除之後都將儲存步驟。表達不好,還是看 吧 us...