整数的素数因子分解
给定某个正整数 N,求其素因子分解结果
输入格式:
输入long int范围内的正整数 N。
输出格式:
按给定格式输出N的素因式分解表达式,即
N=p1^k1*p2^k2*…*pm^km
其中pi为素因子并要求由小到大输出,
指数ki为pi的个数;当ki为1即因子pi只有一个时不输出ki。
输入样例:
2350
输出样例:
2350=2*5^2*47
C语言完整代码如下:
#include<stdio.h>
#include<math.h>
int main() {
long int m;
while(scanf("%ld",&m)!=EOF) {
int a[1000];
int b[100];
long int i;
int j,n;
if(m==1) {
printf("1=1\n");
} else {
printf("%ld=",m);
int k=0;
for(i=2; i<=m; i++) {
n=sqrt(i);
// 对每一个数 i 分解它的素数
while(m%i==0) {
for(j=2; j<n; j++) {
if(i%j==0) {
break;
}
}
if(j>=n) {
// i为素数,则保存到数组中
a[k]=i;
k++;
}
m=m/i;
}
}
int x;
for(i=0; i<k; i++) {
x=0;
// 统计重复出现的数字的次数
for(j=i; j<k; j++) {
if(a[i]==a[j])
x++;
}
// 跳过已统计过的
i=i+x-1;
// 格式要求,如果未到末尾
if(i!=k-1) {
if(x==1) {
printf("%d*",a[i]);
} else {
printf("%d^%d*",a[i],x);
}
// 到了末尾则换行输出
} else {
if(x==1)
printf("%d\n",a[i]);
else
printf("%d^%d\n",a[i],x);
}
}
}
}
return 0;
}