关于C语言中分解质因数的源代码

来源:百度知道 编辑:UC知道 时间:2024/06/08 01:09:05
题目要求:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
以下是网上找的源代码。
main()
{
int n,i;
printf("\nplease input a number:\n");
scanf("%d",&n);
printf("%d=",n);
for(i=2;i<=n;i++)
{
while(n!=i)
{
if(n%i==0)
{ printf("%d*",i);
n=n/i;
}
else
break;
}
}
printf("%d",n);}

有三个疑问。
1,在循环开始处的条件i<=n中,n的值是会改变的吗?因为在下面的代码中n的值会改变,n=n/i
2,为什么在循环内部的判断条件是n!=i?
3,为什么最后要输出n的值?

谢了。

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

1.n要变,越变越小n最后变为它的最大的那个因数。
2.n!=i,这个循环是为了分解出所有i的因数。
3.最后的那一个因数是最大的,i逐渐递增最后必然是和它相等的。所以最后一个因数始终是不能用n!=i这个循环求出来的。最后剩下的那个数必然是它的最大的那个因数而且是最后的那个,因为有可能有两个最大,但是前一个可求出,后一个则不能用n!=i求出。

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*后面最后一个质因数是不显示的

1.会改变,可另设一参数,用以代替