【PAT】1059 Prime Factors (25分)(質因子分解)

1059 Prime Factors (25分)

題目鏈接

在這裏插入圖片描述
典型的質因子分解,代碼如下:

#include<iostream>
#include<cmath>
using namespace std;

#define maxn 10000005

int prime[maxn], pnum=0;
bool p[maxn];

struct factor{
	int x;		//質因子 
	int cnt;	//個數 
}fac[10];
//int最大數的質因子個數不會超過十個不同的,所以開10個數組足夠了 
int fac_num= 0;

void find_Prime(int n)//素數篩查 
{
	int sqt = (int)sqrt(1.0 * n);
	for(int i=2;i<=sqt;i++)
		if(!p[i])
		{
			prime[pnum++] = i;
			for(int j=i+i;j<=sqt;j+=i)
				p[j] = true;//true爲合數 
		}
}

void deal(int n)//處理 
{
	for(int i=0;i<pnum;i++)
	{
		if(n % prime[i]==0){
			fac[fac_num].x = prime[i];
			fac[fac_num].cnt = 0;
			while(n % prime[i] == 0){
				fac[fac_num].cnt++;
				n /= prime[i];
			}
			fac_num++;
		}
	}
	if(n != 1)
	{
		fac[fac_num].x = n;
		fac[fac_num++].cnt = 1;
	}
}

int main()
{
	int num;
	cin>>num; 
	if(num==1){
		cout<<"1=1"<<endl;
		return 0;	
	}
	find_Prime(num);
	deal(num);
	cout<<num<<"=";
	for(int i=0;i<fac_num;i++)
	{
		cout<<fac[i].x; 
		if(fac[i].cnt != 1)
			cout<<"^"<<fac[i].cnt;
		if(i!=fac_num-1)
			cout<<"*";
	}
	cout<<endl;
	return 0;
}

在這裏插入圖片描述
在這裏插入圖片描述

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