题目
将一个正整数N(1< N< 32768)分解质因数。例如,输入90,打印出90=233*5。
输入
无
输出
无
样例输入
66
样例输出
66=2*3*11
解题思路
本题主要考察的是质因数的分解,采用递归的方式:每一次递归将输入的数分解为a和b,若a不是质数,则继续调用递归函数,直到a被分解为质数;b亦复如是。
类似题目:题目 1464: 分解质因数。
代码
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int num = 0;//记录质因数的个数
int a[100];//存储质因数
int isPrime(int n){
int i;
if (n<2)
return 0;
else if (n>2)
{
for (i=2;i<=sqrt(n);i++)
if (n%i==0)
return 0;
}
return 1;
}
int cmp(const void *a, const void *b){
return *(int *)a - *(int *)b;
}
void factor(int n){
int i,isfind =0;
for (i=2;i<=sqrt(n);i++)
{
if (n%i==0)
{
isfind = 1;
if (isPrime(i)==0)
factor(i);
else
a[num++] = i;
if (isPrime(n/i)==0)
factor(n/i);
else
a[num++] = n/i;
break;
}
}
if (isfind==0)
a[num++] = n;
}
int main()
{
int i,n;
scanf("%d",&n);
printf("%d=",n);
factor(n);
qsort(a,num,sizeof(int),cmp);
for (i=0;i<num;i++)
{
if (i!=0)
printf("*");
printf("%d",a[i]);
}
return 0;
}