1、n的值是会改变的。在这边这样理解:
i从2开始。如果能整数比如说2.那么此时n/2. 然后再去带到while判断。如果i<=n(此时n=n(原来的n)/2).然后能被2整除的话,继续循环。直到没有2这个质因素。接着往3走。
2.因为边除,i的值会越来越大。而n的值会越来越小。参考1里分析的。当n=i的时候。也就是本身。同时也就是原来n的最大质因素。所以这个判断条件是对的。
3、参考2.因为n是原来n的最大质因素。所以最后还必需输入n
也举个简单例子.
n=20.
输入n=20.
i=2 n%i==0.所以n=20/2=10,i++.但是n的值发现变化。
所以需要重新赋值for(i=2;i<=n=10;i++)
i=2时n%i==0.所以n=10/2=5,i++
下面的同理
i=3时n%i!=0 ,i++
i=4时n%i!=0,i++
i=5时n=i.
所以20=2*2*5
以90为例
这个程序的大概思路是从2开始到90为止一个数一个数的实验,看是否是90的因子。
while循环的作用是看是否有重复因子,如:
90=2×3×3×5,当实验到3时,发现除一次不够,就在除一次3.
针对你的问题:
1.n会改变的。因为你找因子的过程中找到一个就要除掉它再找。如:90首先找到了2,就除以2,给45再找。
2&3.n!=i;n不等于i;我举个n=9的例子。首先找到3合适,由于9!=3,进入while循环,9/3=3,输出3*;n变成了3,3=3,所以跳出循环,由程序最后一句printf语句输出此时的n.最终输出9=3*3.
1、n的值是会改变的。在这边这样理解:
i从2开始。如果能整数比如说2.那么此时n/2.
然后再去带到while判断。如果i<=n(此时n=n(原来的n)/2).然后能被2整除的话,继续循环。直到没有2这个质因素。接着往3走。
2.因为边除,i的值会越来越大。而n的值会越来越小。参考1里分析的。当n=i的时候。也就是本身。同时也就是原来n的最大质因素。所以这个判断条件是对的。
3、参考2.因为n是原来n的最大质因素。所以最后还必需输入n
也举个简单例子.
n=20.
输入n=20.
i=2
n%i==0.所以n=20/2=10,i++.但是n的值发现变化。
所以需要重新赋值for(i=2;i<=n=10;i++)
i=2时n%i==0.所以n=10/2=5,i++
下面的同理
i=3时n%i!=0
,i++
i=4时n%i!=0,i++
i=5时n=i.
所以20=2*2*5
n 当然会改变了 n=n/i;
如果n的值等于i的值的话,那就是n=2;
最后输出的n已经不是开始用户输入的值了 是n=n/i; 是最后一个质因数
if(n%i==0)
{ printf("%d*",i);
n=n/i;
}
这样的话到最后n=最后一个分解出来的质因数的时候就执行else了 而不再打印出来
没有最后那个输出n的话 显示的结果将是n=i*j*后面最后一个质因数是不显示的