#include <stdio.h>
#include <math.h>
//判断一个数是不是素数
int isPrime(int n)
{
if(n<2)return 0 ;
else{
int t = (int)sqrt(n);
int i;
for ( i=2 ; i <= t; i++ )
{
if( n%i==0 )
return 0 ;
}
}
return 1;
}
//递归进行因式分解
/**
m为要分解的数,当m=1(m/n=1即m=n)时递归结束,函数相当于从2开始找m的因子,一直到m. n∈[2,m]
*/
void factorize(int m,int n)
{
if (m==1) return;
if (m%n) //n不是m的因数
{
factorize(m,n+1);
}
else
{
printf("%d ",n);
factorize(m/n,n);
}
}
/************************************************************************/
/* /* 任意在2~n-1中找两个因数(不一定要质因数)i和j,即i*j=n;
如果i是质数,则i一定是n的一个质数,否则继续对i进行分解。
如果j是质数,则j一定是n的一个质数,否则继续对j进行分解。 */
/************************************************************************/
void factorize2(int n)
{
int i ;
for ( i = 2 ; i < n ; i++ )//任意在2~n-1中找两个因数(不一定要质因数
{
if( n % i == 0 )//i为质数
{
printf("%d ",i);
if(isPrime(n/i))
{
printf("%d ",n/i);
}
else
{
factorize2(n/i);
}
break ;
}
}
}
int main()
{
int number;
while(1)
{
printf("请输入一个合数进行分解:\n");
scanf("%d",&number);
if(isPrime(number))
{
printf("该数不是合数,请重新输入\n");
continue ;
}
printf("递归方法1:\n");
factorize(number,2);
printf("\n\n");
printf("递归方法2:\n");
factorize2(number);
printf("\n\n");
}
return 0 ;
}
#include <math.h>
//判断一个数是不是素数
int isPrime(int n)
{
if(n<2)return 0 ;
else{
int t = (int)sqrt(n);
int i;
for ( i=2 ; i <= t; i++ )
{
if( n%i==0 )
return 0 ;
}
}
return 1;
}
//递归进行因式分解
/**
m为要分解的数,当m=1(m/n=1即m=n)时递归结束,函数相当于从2开始找m的因子,一直到m. n∈[2,m]
*/
void factorize(int m,int n)
{
if (m==1) return;
if (m%n) //n不是m的因数
{
factorize(m,n+1);
}
else
{
printf("%d ",n);
factorize(m/n,n);
}
}
/************************************************************************/
/* /* 任意在2~n-1中找两个因数(不一定要质因数)i和j,即i*j=n;
如果i是质数,则i一定是n的一个质数,否则继续对i进行分解。
如果j是质数,则j一定是n的一个质数,否则继续对j进行分解。 */
/************************************************************************/
void factorize2(int n)
{
int i ;
for ( i = 2 ; i < n ; i++ )//任意在2~n-1中找两个因数(不一定要质因数
{
if( n % i == 0 )//i为质数
{
printf("%d ",i);
if(isPrime(n/i))
{
printf("%d ",n/i);
}
else
{
factorize2(n/i);
}
break ;
}
}
}
int main()
{
int number;
while(1)
{
printf("请输入一个合数进行分解:\n");
scanf("%d",&number);
if(isPrime(number))
{
printf("该数不是合数,请重新输入\n");
continue ;
}
printf("递归方法1:\n");
factorize(number,2);
printf("\n\n");
printf("递归方法2:\n");
factorize2(number);
printf("\n\n");
}
return 0 ;
}