求解素因子

素因子的定義:對於一個數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)的求一個數所有素因子的方法.

具體步驟

  1. 除以所有以 2 爲倍數的因子
  2. 枚舉以 i 爲倍數爲因子的整數, 此時 i 肯定爲奇數.
  3. 防止 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; 
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章