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

输入一个整数 n (2 <= n < 100)。
输出该整数的因子分解表达式。
表达式中各个素数从小到大排列。
如果该整数可以分解出因子a的b次方,当b大于1时,写做 a^b ;当b等于1时,则直接写成a。
60
2^2*3*5

题型/思路

     计算因子分解。设计一个struct分别存储一个数的质因数、和其因数对应的指数。                                                           求一个数的各个质因数(拆分成因子)的模板:(方法)

	for(int i=2;i<=n;i++){//i是for循环index,切记!这里i<=n! 
		if(n%i==0){
			len++;
			c[len].a=i;
		}
		while(n%i==0){//直到不能被该因子整除,退出循环 
			n=n/i;
			c[len].b++;//指数++ 
			//n=n/i;
		}
	}

 

AC代码

 

#include <iostream>

using namespace std;

struct node{
	int a;//质因数 
	int b;//质因数的指数 
}c[105];//a数组存放(质因数,其对应指数) 的数对 

int main(int argc, char** argv) {

	int len=0;//c数组的index 
	int  n;
	cin>>n;
	for(int i=2;i<=n;i++){//i是for循环index,切记!这里i<=n! 
		if(n%i==0){
			len++;
			c[len].a=i;
		}
		while(n%i==0){//直到不能被该因子整除,退出循环 
			n=n/i;
			c[len].b++;//指数++ 
			//n=n/i;
		}
	}
	/* cout<<len<<endl;    //中间测试输出len 和质因数 
	for(int i=1;i<=len;i++){
	   cout<<c[i].a<<" ";
	} cout<<endl;
	*/
	for(int i=1;i<len;i++){
		cout<<c[i].a ;
		if(c[i].b>1){
			cout<<"^"<<c[i].b;
		}
		cout<<"*";
	} 
	    cout<<c[len].a ;
		if(c[len].b>1){
			cout<<"^"<<c[len].b;
		}
	
	return 0;
}