1. 程式人生 > >算法--因數分解

算法--因數分解

stream namespace 因數分解 == ios col div name 分解

題目:

各位在國小時都學過因數分解,都瞭解怎麼樣用紙筆計算出結果,現在由你來敎電腦做因數分解。

因數分解就是把一個數字,切分為數個質數的乘積,如 12=2^2 * 3

其中, 次方的符號以 ^ 來表示

輸入說明

一個整數, 大於1 且 小於等於 1000000

輸出說明

一個字串

範例輸入
20
17
999997
範例輸出
2^2 * 5
17
757 * 1321

分析:用兩個數組a,b,a[i] 和 b[i] 分別存儲由小到大排序的第i個質因數及其指數。對於每一個質因數,都會一次性“提取”幹凈,這樣,接下去最近遇到的總是質數,如果能整除當前剩下的數now,該數就是now的質因數……如此進行下去,直到候選質數超過sqrt(n)。

代碼:

 1 #include <iostream>
 2 #include <math.h>
 3 using namespace std;
 4 int a[10000],b[10000];
 5 int temp,now,tot;
 6 int main(){
 7     int n;
 8     while(cin>>n){
 9         temp=(int)((double)sqrt(n)+1);
10         now=n;
11         tot=0;
12         for(int i=2;i<=temp;++i){
13
if(now%i==0){ 14 a[++tot]=i; 15 b[tot]=0; 16 while(now%i==0){ 17 ++b[tot]; 18 now/=i; 19 } 20 } 21 } 22 if(now!=1){ 23 a[++tot]=now; 24 b[tot]=1
; 25 } 26 for(int i=1;i<tot;i++){ 27 if(b[i]==1) cout<<a[i]<<" * "; 28 else cout<<a[i]<<"^"<<b[i]<<" * "; 29 } 30 if(b[tot]==1) cout<<a[tot]<<endl; 31 else cout<<a[tot]<<"^"<<b[tot]<<endl; 32 } 33 return 0; 34 }

算法--因數分解