我无法理解代码如何给出输入的素因数的输出。在这段代码中 temp 变量有什么用?另一个问题是代码片段中 i=1 的目的是什么?
#include<stdio.h>
int main()
{
int number,i,temp;
scanf("%d",&number);
if(number<0)
{
printf("%d = -1 x ",number); //just printing
number=number*-1; //multiplication by -1
}
else
{
printf("%d = ",number); //just printing
}
for(i=2;i*i<=number;i++)
{
if(number%i==0)
{
printf("%d x ",i);
number=number/i;
temp=i;
i=1;
}
}
printf("%d\n",number);
return 0;
}
sample input:100
sample output:100 = 2 x 2 x 5 x 5
sample input:20
sample output:20 = 2 x 2 x 5
最佳答案
如前所述,temp 未使用。
打印素数的方式是一遍又一遍地尝试用该数字除以可能的最小数字。这就是 i=1 的目的。
所以取175。
首先,循环初始化为 2。然后递增 i 直到 175 % i == 0。发生这种情况时,意味着 i 是 175 的因数。因此它会打印 i 并将 175 除以 i。这可确保您不会重复计算该系数。在这里,这将首先发生在 i == 5 时。所以现在 num = 175/5 = 35。
此时,i 被重置为 1。循环 block 结束时发生的第一件事是 i 增加到 2。所以现在它再次寻找最小的因子。再次,它找到了 5。
如果 i 没有设置为 1,程序将继续向上运行,并且会错过 5 是 175 的因数两倍的事实。
最终,当 i > number 时,程序知道它已找到所有因子。这是因为因子必须小于它们作为因子的数量。
希望这有帮助。
关于无法理解代码片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24836962/