素因子的定義:對於一個數n來說,將它的因子拆到若干個素數相乘,這些素數被稱爲n的素因子。
比如 12可以被拆爲2 6
6不是質數,可以繼續拆爲2*3
所以最後12的素因子就是 2, 3(不計重複元素)
-------------------------------------------------分割線---------------------------------------
前言
那麼一般菜雞(我)寫求素因子的算法時常常從i=2到sqrt(n*1.0)枚舉,然後不停的拆分,時間複雜度爲O(nlogn)(有些人甚至想也不想,直接從2枚舉到n。。。orz)
然而, Vishwas Garg提供了一種更爲高效(logN)的求一個數所有素因子的方法.
具體步驟
- 除以所有以 2 爲倍數的因子
- 枚舉以 i 爲倍數爲因子的整數, 此時 i 肯定爲奇數.
- 防止 n 本身是個素數
#include<iostream>
#include<cmath>
using namespace std;
void primeFactor(int n){
//求解n的素因數
while(n%2==0){
cout<<2<<" ";
n/=2;
}
for(int i=3;i<=sqrt(n*1.0);i+=2){
while(n%i==0){
cout<<i<<" ";
n/=i;
}
}
if(n>2){
cout<<n;
}
cout<<endl;
}
int main(){
int n;
cin>>n;
primeFactor(n);
return 0;
}