c语言质因数分解算法简单,质因数分解C语言
#包含stdio.h
void prim(int n,int i){
if(n=i){
while(n % i){
我;
}
n/=I;
prim(n,I);
printf(%d\n ,I);
}
}
int main(){
int num,I=2;
scanf(%d ,编号);
prim(num,I);
返回0;
}运行结果:
而(n% i)代表余数。当余数为0时,表示除法,结束while循环,即找到一个质因数,然后一个质因数就是I,如果没有除法,就继续执行I。I的最大值就是I的值等于N的值,当I等于N时,这个循环一定会结束,这是结束这个循环的最终条件。不会让程序陷入死循环。
n/=I;让n去掉这个素因子,然后进入寻找新的n个素因子的递归。
例如:
求15的因式分解质因数
当n=15时,I=2;
第一次执行Prim功能:
判断15=2
执行结果
真实的
第一次执行循环体时:
而(15 % 2)
执行I?
执行结果
真实的
真实的
注意:在C语言中,1为真,0为假。当n% i的结果为0时,循环体将结束。
第二次执行循环体时:
而(15 % 3)
执行I?
执行结果
错误的
错误的
此时,while循环结束。
开始执行n/=I;语句,它是通过以下过程实现的
15/3=5;n=5;
使用n的值作为质因数(循环结束后获得的I结果),然后将商赋给n。
再次调用prim(n,I)函数。
prim函数的第二次执行:
判断5=3
执行结果
真实的
第一次执行循环体时:
而(5 % 3)
执行I?
执行结果
真实的
真实的
第二次执行循环体时:
而(5 % 4)
执行I?
执行结果
真实的
真实的
第二次执行循环体时:
而(5 % 5)
执行I?
执行结果
错误的
错误的
此时,while循环结束。
开始执行n/=I;语句,它是通过以下过程实现的
5/5=1;n=1;
使用n的值作为质因数(循环结束后获得的I结果),然后将商赋给n。
再次调用prim(n,I)函数。
第三次执行Prim功能:
1=5
执行结果
错误的
第三个函数执行完毕,开始逐层完成第一个和第二个函数。
接下来,打印结束第二次运行的prim函数的5。
最后,完成了prim函数的第一次运行。打印3。
所以得出结论,3和5是15的分解素因子。
注意:整个递归过程中变量I的初始值是2,不会在每次调用prim(n,I)函数时初始化。在递归过程中通常使用同一个变量I的值。只有当主函数程序结束时,变量I的值才会在内存中被销毁,当程序再次运行时,变量I的值会被初始化为2。
转载请联系作者授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。