作者 何钦铭
单位 浙江大学
给定某个正整数 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
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include<stdio.h>
#include<math.h>
int main()
{
long int n,i,j,x=0,y=-1,z=0,k=0;
scanf("%ld",&n);
printf("%ld=",n);
for(j=2;j<=sqrt(n);j++)
{
if(n%j==0)
break;
}
if(j>sqrt(n))
printf("%ld",n);
else
{
for(i=2;;)
{
if(n==1&&x==0)
{
printf("\n");
break;
}
for(j=2;j<=sqrt(i);j++)
{
if(i%j==0)
break;
}
if(j>sqrt(i)&&n%i==0&&(z==0||y==i))
{
x+=1;
y=i;
z=1;
n/=i;
continue;
}
else if(j>sqrt(i)&&z==1)
{
i++;
if(k!=0)
printf("*");
if(x>1)
printf("%ld^%ld",y,x);
if(x==1)
printf("%ld",y);
x=0;
z=0;
k=1;
}
else
{
i++;
}
}
}
}
结果展示: