算法笔记——分解质数(当然是int型的数据)

由于可处理的数据范围极小,而且算法比较暴力。所以仅供参考没有实际意义。

分解大质数还是得靠python。

#include<iostream>
using namespace std;


struct factor
{
	int x, cnt;
}fac[10];
const int maxn = 10000;//表长
int prime[maxn], pNum = 0;//prime数组存放所有素数,pNum记录素数个数
bool p[maxn] = { false };//散列p,true表示不是素数,反之false为素数
void Find_Prime(int n)
{
	for (int i = 2; i < n+1; i++)//切记是i<n+1,不是i<n也不是i<=n+1
	{
		if (p[i] == false)//当i为素数
		{
			prime[pNum++] = i;//把素数i存到prime数组中
			for (int j = i + i; j < n+1; j += i)
			{
				//筛去所有i的倍数
				p[j] = true;
			}
		}
	}
}

int main(void) 
{
	int n,num=0;
	while (cin >> n)
	{
		Find_Prime(n);//打印素数表
		for (int i = 0; i < pNum; i++)
		{
			if (n%prime[i] == 0)
			{
				fac[num].x = prime[i];//记录该质因子
				fac[num].cnt = 0;//初始化该质因子个数
				while (n%prime[i] == 0)//计算同个质因子的个数
				{
					fac[num].cnt++;
					n /= prime[i];
				}
				num++;//不同的质因子个数加1
			}
		}
		if (n != 1)
		{
			fac[num].x = n;
			fac[num++].cnt = 1;
		}
		cout << fac[0].x << '^' << fac[0].cnt;
		for (int i = 1; i < num; i++)
		{
			cout << '*' << fac[i].x << '^' << fac[i].cnt;
		}
		cout << endl;
		//初始化
		num = 0;
		pNum = 0;
	}
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41938259/article/details/86345366