2018年8月20日 下午3:54
分解质因数_百度百科
实现1:双重循环
1 | int fjzys(int k) |
实现2:单层循环
- 可直接在VC6.0运行
- 这道题使用的是单层循环,思路总结:
- 其实这种要求下,while循环的遍历对象是i。平常来说,我们的思维是让i作为一个计数值,不断的进行1的累加,即i++,i的累加是不间断的
- 但是在这里,i的累加是间断的,需要通过if来判断是否可以进行i++,甚至要倒退回去,即i=2
- 也就是说,这里的i不是递增的,而是可大可小,来回徘徊
- 单层循环与双层循环的思维区别?
- 双层循环是对我们正常现实生活结题方式的表达形式模拟
- 单层循环,在我们通过例子去尝试时,我们专门的观察i,即被除数在整个流程中变化情况。最后的问题时:在什么情况下i++,什么情况下i=2。
- 而双层循环的问题是:在给定一个数的时候,如何遍历得到他的最小质因数。
- 通俗来说:其实就是提出的问题不同,最后解决问题的方式也就不同了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int m,b,c=0,j=0;
int a[10]; //存放质因数
int fjzys(int k)
{
int i=2;
while(k>=i) //判断k是否合格
{
if(k%i==0) //判断k是否整除当前因数
{
a[j]=i; //存入因数
k/=i; //余数
i=2; //令i重新等于2
j++; //计数值
}
else
{
i++; //不能整除则当前因数为非质因数
}
}
return 0;
}
实现3:单层循环
此代码因为用了long long int,为C99标准,故不可在VC6.0上运行
1 |
|