【經典100題】 題目14 將一個正整數分解質因數
阿新 • • 發佈:2018-12-22
C語言實現
#include<stdio.h> void main() { int num, n, i, j, t; int k = 2; int f[10] = { 0 }; int index = 0; printf("請輸入一個正整數:"); scanf("%d", &num); n = num; for (j = 1; j < (int)(num / 2) + 1; j++) { for (i = k; i <= n; i++) { t = n%i; if (t == 0) //判斷能否被i整除 { f[index] = i; n = (int)(n / i); index++; break; } else k++; } } if (f[0] == 0) printf("沒有質因數\n"); else { f[index + 1] = n; printf("%d = %d", num, f[0]); for (int i = 1; i < sizeof(f) / sizeof(f[0]); i++) { if (f[i] == 0)//初始化的陣列後面是0,不再輸出 break; printf("*%d", f[i]); } } }
執行結果:
請輸入一個正整數:1234
1234 = 2*617請按任意鍵繼續. . .
C++語言實現
#include<iostream> #include<vector> using namespace std; void main() { int num, n, i, j,t; int k = 2; vector<int> v1; int size; cout << "請輸入一個正整數" << endl; scanf("%d", &num); n = num; for (j = 1; j < int(num/2) + 1; j++) { for (i = k; i < n; i++) { t = n%i; if (t == 0) { v1.push_back(i); n = int(n/i); break; } else k++; } } size = v1.size(); if (size==0) cout << "沒有質因數" << endl; else { v1.push_back(n); cout <<num<<"="<<v1[0]; for (int i = 1; i < size+1; i++) cout << "*"<<v1[i] ; } }
執行結果:
請輸入一個正整數
1234
1234=2*617請按任意鍵繼續. . .
python語言實現
n = num = int(input('請輸入一個數字:')) #用num保留初始值 f = [] #存放質因數的列表 k = 2 for j in range(int(num/2)+1): #判斷次數僅需該數字的一半多1次 for i in range(k, n): t = n % i #i不能是n本身 if t == 0: #若能整除 f.append(i) #則表示i是質因數 n = n//i #除以質因數後的n重新進入判斷,注意應用兩個除號,使n保持整數 break #找到1個質因數後馬上break,防止非質數卻可以整除的數字進入質因數列表 else: k = k+1 #如果i不是質因數,下一次迴圈就從k+1開始 if len(f) == 0: #若一個質因數也沒有 print('該數字沒有任何質因數。') else: #若至少有一個質因數 f.append(n) #此時n已被某個質因數整除過,最後一個n也是其中一個質因數 f.sort() #排下序 print('%d=%d' % (num, f[0]), end='') for i in range(1,len(f)): print('*%d' % f[i], end='')
執行結果:
請輸入一個數字:1234
1234=2*617
>>>
★finished by songpl,2018.12.12