從理解到程式設計 分解質因數

2021-10-06 04:37:14 字數 991 閱讀 3373

1、短除法

2、質數p的約數只有兩個:1和p。

3、大於2 的質數都是奇數。

4、初等數學基本定理:任一大於1的自然數,要麼本身是質數,要麼可以分解為幾個質數之積,且這種分解是唯一的。

5、如果有兩個質因數x, y大於sqrt(n),x*y > sqrt(n) * sqrt(n) = n也就是這兩個數的乘積就大於n了,

所以最多有乙個大於sqrt(n)的質因數。

#include "stdafx.h"

#include #include #include #include #include using namespace std;

large_integer m_nfreq;

large_integer m_nbegintime;

large_integer nendtime;

bool setconsolecolor(word wattributes)

int main()

for( i = 3;i<=sqrt(num);i += 2)

else

break;}}

if(num > 1)//最後乙個質因數

printf("%lld", num);

} if((n<2)||(n>65535))

else if(n == num)

printf(" 是質數\n");

中間遇見的問題:

1、質因數出現1

因為用的是短除法,肯定是最後的乘數必然是1。需要判一下是否出現整除,商是1的情況,跳出迴圈。

2、漏掉最後乙個的質數

因為忽視了 判斷篩法中的範圍 2~根號n 後,最後乙個數必然是最大的質因數。

分解質因數

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

分解質因數

大數的質因數分解一直以來是亟需解決的難題。本文從最基本的試除法開始,分解質因數的方法。下面的程式在開頭定義了乙個巨集opt,如果刪掉這個定義,就可以執行最原始的演算法。一 樸素演算法 include include include using namespace std define opt int...