信息学奥赛一本通 因子分解

题目描述

输入一个数,输出其素因子分解表达式。

输入

输入一个整数 n (2<=n<100)。

输入样例

60

输出样例

2 2 2 ^ 2 ∗ 3 ∗ 5 2*3*5 235

题目分析

通过递归分解数字

代码

#include
#include
#include
using namespace std;
void Number(int N,int I);
bool Prime(int num);   //判断num是否为素数 
int a[3]={0,0,0};  //a[0]用来储存是否是第一个 a[1]用来储存值 a[2]用来储存值的指数 
int main(void){
	int n;
	cin>>n;
	Number(n,2);
	return 0;
} 
void Number(int N,int I){
	if(N==1){
		if(a[2]!=1)
			cout<<a[1]<<"^"<<a[2]<<endl;
		else
			cout<<a[1]<<"\n";
		exit(0);
	}
	for(int i=I;i<=N;i++){   //I用来保证每次递归的值都大于或等于上一次的值 
		if(N%i==0&&Prime(i)){
			if(a[0]==0){  //如果为第一次直接输入 
				a[0]=1;
				a[1]=i;
				a[2]++;
			}
			else{
				if(i==a[1])  //如果这次与上次的值相同则增加指数 
					a[2]++;
				else{  //不相同泽输出上次的值并将数组更新为这次的值 
					if(a[2]!=1)
						cout<<a[1]<<"^"<<a[2]<<"*";
					else
						cout<<a[1]<<"*";
					a[1]=i;     //更新值与系数 
					a[2]=1;
				}
			}
			Number(N/i,i);
		}
	}
}
bool Prime(int num){
	for(int i=2;i<num;i++){
		if(num%i==0)
			return false;
	}
	return true; 
}

你可能感兴趣的:(算法,C++)