算法--因數分解
阿新 • • 發佈:2017-08-19
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){ 13if(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 }
算法--因數分解