本文主要是介绍两种方法对一个数进行质因子式分解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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语句忘记,看来对于递归还是不够清楚啊。
这篇关于两种方法对一个数进行质因子式分解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!