两种方法对一个数进行质因子式分解

1.不使用递归逐步找出原数的因子数。打印输出的形式为:10 = 2*5

void factorization_norecursion(int num){
	int i = 2;
	while(i < num){//当i不满足<num时, num就是原数的最后一个质因子,在循环外打印输出即可
		if(num % i == 0){
			//找到的第一个因子一定是质数,不必再进行判断
			printf("%d*", i);
			num /= i;
		}else{
			//i不是num的因子继续向后寻找
			i++;
		}
	}	
	printf("%d\n", num);
}

2.使用递归的方法

int isPrime(int n){
    int i;
    for(i = 2; i < n; i++){
        if(n % i == 0)
            return 0;
    }
    return 1;
}
void factorization_recursion(int num){
	int i;
	if(isPrime(num))	printf("%d  ", num);
	else{
		for(i = 2; i < num; i++){
			if(num % i == 0){
				printf("%d*", i);
				/***根据因子数是不是素数分*****/
				if(isPrime(num / i)){
					printf("%d", num / i);
					break;
				}else{
					factorization_recursion(num / i);
				}
				break;
			}
		}
	}
	
}

今天再次看到这个函数时,感觉怪怪的。就重新写了一下:

void fun2(int num){
	int i;
	if(isPrime(num))//如果是质数
		printf("%d\n", num);
	else{//不是质数
		for(i = 2; i < num; i++){
			if(num % i == 0){
				printf("%d*", i);
				num /= i;
				fun2(num);
				break;//此处需要跳出循环,否则继续执行的话会打印多余的因子
			}
		}
	}
}

【出错记录】void fun2()函数中的break语句忘记,看来对于递归还是不够清楚啊。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值