输入一个数,输出其素因子分解表达式。
输入格式:
输入一个整数 n (2≤n<10000000)。
输出格式:
输出该整数的因子分解表达式。
表达式中各个素数从小到大排列。
如果该整数可以分解出因子a的b次方,当b大于1时,写做 a^b ;当b等于1时,则直接写成a。
输入样例:
20
输出样例:
2^2*5
上代码:
#include<stdio.h>
int n,sum=0;
int a[100000000]={0};
int flag(int x){
int i;
if(x==1)
return 0;
if(x==2)
return 1;
for(i=2;i<=x;i++){
if(x%i==0)
return 0;
else
return 1;
}
}
void chai(int x,int y)
{
if(x==0||y>x)
return ;
while(x%y==0&&flag(y)==1)
{
x=x/y;
a[y]=a[y]+1;
}
if(a[y]>0)
sum=sum+1;
chai(x,y+1);
return ;
}
int main(){
int i,k=0;
scanf("%d",&n);
chai(n,2);
for(i=2;i<=n;i++){
if(a[i]>1){
if(k+1==sum)
printf("%d^%d",i,a[i]);
else{
printf("%d^%d*",i,a[i]);
k=k+1;
}
}
else if(a[i]==1){
if(k+1==sum)
printf("%d",i);
else{
printf("%d*",i);
k=k+1;
}
}
}
return 0;
}
函数主要有两个:一是判断除数是否为素数;二是递归函数(不停地拆分,同时记录每个数字出现地次数)。题目中的k表示出现数字的种类,由于中间要输出*号,因此需要判断输出数字种类的次数。