1. 程式人生 > >[數論]唯一分解定理

[數論]唯一分解定理

/*
Name:唯一分解定理

Actor:HT

Time:2015年8月11日

Error Reporte:

*/
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <string.h>

using namespace std;

//任意整數可以化為一組素數積
//n = p1^a1 * p2^a2 * p3^a3 ... ...

int prise[1000];

int gdd[1000];
int eq[1000];
int sum;

void fun(int a)
{
	int i, j;
	for (i = 2; i*i <= a; i++)
	{
		if (prise[i] != 0) continue;
		for (j = i; i*j <= a; j++)
		{
			prise[i*j] = 1;
		}
	}

	sum = 0;
	memset(eq, 0, sizeof(eq));
	for (i = 2; i <= a; i++) if (prise[i] == 0)
	{
		if (a%i == 0)
		{
			gdd[sum] = i;
			while (a%i == 0)
			{
				a /= i;
				eq[sum]++;
			}
			sum++;
		}
	}

}

int main()
{
	int a;
L:	scanf("%d", &a);
	fun(a);

	int i;
	for (i = 0; i < sum; i++)
	{
		printf("%d ^ %d\n", gdd[i], eq[i]);
	}
	//goto L;
}