如何分解質因數

2021-09-20 10:11:55 字數 1500 閱讀 1580

如何分解質因數

質數,因數,合數,和倍數的知識,的結構圖.

在小學數學裡,兩個正整數相乘,那麼這兩個數都叫做積的因數,或稱為約數

質數 是指只能被1和自己整除的自然數.其餘的叫做合數.

上小學的時候,我們就知道所有的

自然數可以分為質數(素數)和合數兩類,

當然還特別規定了

「1既不是質數,也不是合數」.

100以內的質數,從小到大依次是:2、3、5、7、11、13、17、19、……、83、89、97.不用說了,你一定會背下來.那麼質數的個數是不是有限多的呢?

在解決這個問題之前,我們先來看看另乙個問題:

怎樣判斷乙個已知自然數是不是質數.比如,143是不是質數?

你一定會按照下面這個步驟去判斷:

先用最小的質數2去除143,不能整除;再用3去試試,還是不行;再依次用5、7試試,還是不行;11呢?行!143=11×13,所以143不是質數,而是合數.所以,

判斷乙個數是不是質數,只需用比這個數小的所有質數,依次去除它即可,

如果都不能整除的話,這個數就一定是質數;相反,只要這個數能夠被某乙個質數整除,這個數就一定是合數.

這種方法所依據的原理是:每乙個合數都可以表示成若干個質數的乘積.

不用說,這叫做「分解質因數」,也是小學數學的知識.

我們先假設質數的個數是有限多的,那麼必然存在乙個「最大的質數」,設這個「最大的質數」為n.下面我們找出從1到n之間的所有質數,把它們連乘起來,就是:

2×3×5×7×11×13×……×n

把這個連乘積再加上1,得到乙個相當大的數m:

m=2×3×5×7×11×13×……×n+1

那麼這個m是質數還是合數呢?乍一想,不難判斷,既然n是最大的質數,而且m>n,那麼m就應該是合數.既然m是合數,就可以對m分解質因數.可是試一下就會發現,我們用從1到n之間的任何乙個質數去除m,總是餘1!這個現實,又表明m一定是質數.

這個自相矛盾的結果,無非說明:最大的質數是不存在的!如果有乙個足夠大的質數n,一定可以像上面那樣,找到乙個比n更大的質數m.既然不存在最大的質數,就可以推知自然數中的質數應該有無限多個

質數是指只能被1和自己整除的自然數.其餘的叫做合數

#define _crt_secure_no_warnings

#include

#include

#include

#include

using namespace std;

bool isprim(int m)

else

cout << 「質數:」 << m << endl;

return true;}}

}int getprim(int m, stack&prim)

getprim(m / n, prim);

prim.push(n);

return 0;

}else if (isprim(m))

return 0;

}void show(stack&prim)

int main()

如何分解質因數

輸入乙個正整數repeat 0 repeat 10 做repeat次下列運算 輸入乙個正整數 m 1 m 1000 將 m 分解質因數。輸出使用以下語句 printf d i 輸入輸出示例 括號內為說明 輸入3 repeat 3 2 m 2 8 m 8 90 m 90 輸出2 2 8 2 2 2 9...

分解質因數

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

分解質因數

分解質因數 問題描述 求出區間 a,b 中所有整數的質因數分解。輸入格式 輸入兩個整數a,b。輸出格式 每行輸出乙個數的分解,形如k a1 a2 a3.a1 a2 a3.k也是從小到大的 具體可看樣例 樣例輸入 3 10 樣例輸出 3 34 2 2 5 56 2 3 7 78 2 2 2 9 3 3...