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...