C语言 递归实现分解质因数
#include <stdio.h>void prim(int n, int i){if(n >= i){while(n % i){i++;}n /= i;prim(n, i);printf("%d\n", i);}
}int main(){int num, i = 2;scanf("%d", &num);prim(num, i);return 0;
}
运行结果:
while(n % i)
代表取余。当余数是0的时候表示除尽,结束while循环,即找到一个质因数,此时一个质因数即为 i 。如果没有除尽则会继续执行 i++,i 的最大值为 i 的值等于 n的值,当 i 等于 n 的时候这个循环一定会结束,成为结束这个循环的最终条件。不会让程序陷入死循环。
n /= i;
让 n 除去这个质因数,然后再进入求新 n 质因数的递归。
例如:
当求 15 的分解质因数
当 n = 15, i = 2时;
prim函数第一次执行:
判断 15 >= 2 | |
---|---|
执行结果 | true |
while 循环体第一次执行:
while(15 % 2) | 是否执行 i++ | |
---|---|---|
执行结果 | true | true |
注:在C语言中 1为true , 0为false. 当 n % i 的结果为0时,循环体才会结束。
while 循环体第二次执行:
while(15 % 3) | 是否执行 i++ | |
---|---|---|
执行结果 | false | false |
此时结束 while 循环。
开始执行 n /= i; 语句,这条语句由以下过程实现
15 / 3 = 5; n = 5;
用 n 的值 ÷ 质因数(循环体结束后得到的 i 结果)再把商赋值给 n。
再次调用 prim(n, i)函数。
prim函数第二次执行:
判断 5 >= 3 | |
---|---|
执行结果 | true |
while 循环体第一次执行:
while(5 % 3) | 是否执行 i++ | |
---|---|---|
执行结果 | true | true |
while 循环体第二次执行:
while(5 % 4) | 是否执行 i++ | |
---|---|---|
执行结果 | true | true |
while 循环体第二次执行:
while(5 % 5) | 是否执行 i++ | |
---|---|---|
执行结果 | false | false |
此时结束 while 循环。
开始执行 n /= i; 语句,这条语句由以下过程实现
5 / 5 = 1; n = 1;
用 n 的值 ÷ 质因数(循环体结束后得到的 i 结果)再把商赋值给 n。
再次调用 prim(n, i)函数。
prim函数第三次执行:
判断 1 >= 5 | |
---|---|
执行结果 | false |
第三次函数结束执行开始逐层结束第一次和第二次运行的函数
其次结束第二次运行的prim函数打印 5
最后结束第一次运行的prim函数打印 3
所以最后得出 3 和 5 是 15 的分解质因数。
注:变量 i 在整个递归的过程中初始值为2,在每次prim(n, i)函数调用的时候不会被初始化,递归过程中共用的都是同一个变量 i 的值。只有当main函数程序结束的时候,变量 i 的值才会在内存中销毁,当程序再次重新运行时,变量 i 的值才会初始化为2。
C语言 递归实现分解质因数相关推荐
- c语言分解质因数的设计思路,C语言开发中分解质因数的操作实例
C语言的开发在日常开发中被广泛使用,而我们都知道C语言是简单的编译方法,爱站技术频道小编今天就为大家带来了C语言开发中分解质因数的操作实例,一起去进入下文看看吧! 首先来看一个最简单的C语言实现质因数 ...
- c语言100以内分解质因数,用C语言实现,将100以内的自然数分解质因数
仅供参考,尽管是C# //****************************************************************************** // Autho ...
- Java 小例子:分解质因数
这个例子演示如何利用递归来完成分解质因数. import java.util.List; import java.util.ArrayList; /** * 分解质因数 */ public class ...
- c语言用质因数分解法求最大公约数,分解质因数法求最大公约数(javascrip实现)
//判断是否为质数------------------------------------------------------ function isPrime(n) { for (var i = n ...
- 蓝桥杯 基础练习 分解质因数 python语言
蓝桥杯 基础练习 分解质因数 python语言 描述 求出区间[a,b]中所有整数的质因数分解. 输入 输入描述: 输入两个整数a,b. 输入样例: 3 10 输出 输出描述: 每行输出一个数的分解, ...
- 蓝桥杯 基础练习 分解质因数 C语言
蓝桥杯 基础练习 分解质因数 C语言 描述 求出区间[a,b]中所有整数的质因数分解. 输入 输入描述: 输入两个整数a,b. 输入样例: 3 10 输出 输出描述: 每行输出一个数的分解,形如k=a ...
- 素数c分解语言程序,深入分析C语言分解质因数的实现方法
首先来看一个最简单的C语言实现质因数分解的列子: #include void main( ) { int data, i = 2; scanf("%d", &data); ...
- 分解质因数c语言设计思路,深入分析C语言分解质因数的实现方法
首先来看一个最简单的C语言实现质因数分解的列子: #include void main( ) { int data, i = 2; scanf("%d", &data); ...
- C语言,分解质因数一个解法!_只愿与一人十指紧扣_新浪博客
题目内容: 每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数.比如,6可以被分解为2x3,而24可以被分解为2x2x2x3. 现在,你的程序要读入一个 ...
最新文章
- Django框架视图类
- Matlab代码的耗时分析、优化、加速
- 业务代码解构利器--SWAK 1
- FX-3U PLC串口与PC通信调试
- java 29期淘淘商城_JavaEE大型分布式电商项目 淘淘商城 29期
- origin画图初步入门
- 插入网线后以太网显示ip4连接无网络访问权限
- 传输层 TCP 三次握手中性能优化 SYN_RCV 状态/syn攻击
- html显示当前脚本错误,访问网页总是提示当前网页脚本发生错误怎么办?
- dz60自定义配列并用qmk编译固件
- 关于多对多关系(即E-R图中m:n)中的界面展示优化
- 计算机画图学生作品小学,电脑绘画作品_需要一件小学生电脑绘画作品
- 什么叫矫顽力(bHc),什么叫内禀矫顽力(jHc)?
- 解决ios13 cydia更新出现http/1.1 404 not found
- 推荐几款好用的办公软件
- 支持 Linux 操作系统的高速 IrDA 红外控制器
- 第一个SOFARPC工程
- 按头安利 好看又实用的毕业季插画素材看这里
- Mac第三方恶意软件删除不了怎么办,这个方法你尝试了吗?
- 七夕福利:程序员如何通过H5绘制手掌地图表白