PAT A1059 Prime Factors 质因数

#include <iostream>
using namespace std;
#include <cmath>
const int maxn = 1000010;
struct factor{
	int m = 0,cnt = 0;
};	
factor p[maxn];
int main()
{	
	int k = 2;//第一个素数
	int x; 
	int e = 1;//用于计算累积乘的结果,来控制*号的输出
	cin >> x;
	int t = x;//找质因子的过程会把改变x,这里备份一个用于输出格式
	if(x == 1){//如果为输入为1直接结束程序
		cout << x << "=" << 1;
		return 0; 
	}
	while(x > 1){//质因数
		if (x % k == 0){
			x = x / k;
			p[k].m = k;
			p[k].cnt++; 
		}
		else k++;
	}
	cout << t << "=";
	//以下为控制输出格式
	for(int i = 0; i < maxn; i++){
		if(p[i].cnt != 0){
			e =pow(p[i].m, p[i].cnt) * e;
			if(e < t){
				if(p[i].cnt > 1) cout << p[i].m << "^" << p[i].cnt << "*";
				else if(p[i].cnt == 1) cout << p[i].m << "*";
			}
			else {
				if(p[i].cnt > 1) cout << p[i].m << "^" << p[i].cnt;
				else if(p[i].cnt == 1) cout << p[i].m;
			}
		}
	}
	return 0;
}
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值