给定某个正整数 N,求其素因子分解结果,即给出其因式分解表达式 N=p1k1⋅p2k2⋯pmkm。
输入格式:
输入long int范围内的正整数 N。
输出格式:
按给定格式输出N的素因式分解表达式,即 N=p1^k1*p2^k2*…*pm^km
,其中pi
为素因子并要求由小到大输出,指数ki
为pi
的个数;当ki
为1即因子pi
只有一个时不输出ki
。
输入样例:
1323
输出样例:
1323=3^3*7^2
#include<stdio.h>
#include<math.h>
#define N 10001
int a[N][2] = { 0 };
int count = 0;
int isPrime(long int a)//判断素数
{
int i;
if (a == 2) { return 1; }
if (a % 2 == 0) { return 0; }
for (i = 3; i < sqrt(a); i += 2)
{
if (a % i == 0)
{
return 0;
}
}
return 1;
}
void calculate(int x, int y)//找出次方
{
if (x == 0 || y > x)
{
return;
}
if (isPrime(y) && x % y == 0)
{
do {
a[count][1]++;
x /= y;
} while (x % y == 0);
a[count++][0] = y;
}
calculate(x, y + 1);
}
int main()
{
long int n;
int o;
scanf("%ld", & n);
isPrime(n);
if (isPrime(n))
{
printf("%ld=%ld", n, n);
return 0;
}
calculate(n, 2);
if (a[0][1] == 1)
{
printf("%ld=%d", n, a[0][0]);
}
else
{
printf("%ld=%d^%d", n, a[0][0], a[0][1]);
}
for (o = 1; o < count; o++)
{
if (a[o][1] == 1)
{
printf("*%d", a[o][0]);
}
else
{
printf("*%d^%d", a[o][0], a[o][1]);
}
}
return 0;
}