1. 程式人生 > >【經典100題】 題目14 將一個正整數分解質因數

【經典100題】 題目14 將一個正整數分解質因數

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