合数的因式分解(递归求解,两种方法)

#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 ;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值