首页 > 学院 > 开发设计 > 正文

1059. Prime Factors (25)

2019-11-10 19:17:14
字体:
来源:转载
供稿:网友

1. 原题: https://www.patest.cn/contests/pat-a-PRactise/1059

2. 思路:

题意:将一个数进行分解成质因数,从小到大输出。思路:题目不难。有多种方法。可以先建立2~根号N的素数表,然后试除。亦或判断下一个素数的方法处理。我采用的边除边判断,并把质因数保存到map里。这样绕了远路了。注意1的特例。

3. 源码(已AC):

#include<iostream>#include<algorithm>//使用sqrt函数#include<map>using namespace std;int main(void){	//freopen("in.txt", "r", stdin);	int x, i;	cin >> x;	cout << x << '=';	map<int, int> fac;//key是素数,value是指数。	if (x == 1)//1的特例	{		cout << 1 << endl;		return 0;	}	while (x > 1)	{		int flag = 0;//是否可分解的标志位		int limit = (int)sqrt(double(x));		for (i = 2; i <= limit; i++)//循环		{			if (x % i == 0)			{				x /= i;				if (fac.count(i) == 0)					fac[i] = 0;				fac[i]++;				flag = 1;				break;			}		}		if (flag == 0)//0表示已无法再分解。		{			if (fac.count(x) == 0)				fac[x] = 0;			fac[x]++;			break;		}	}	map<int, int>::iterator it;//输出	for (it = fac.begin(); it != fac.end(); it++)	{		if (it == fac.begin())		{			if (it->second == 1)				cout << it->first;			else				cout << it->first << '^' << it->second;		}		else		{			if (it->second == 1)				cout << '*' << it->first;			else				cout << '*' << it->first << '^' << it->second;		}	}	cout << endl;	return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表