无法理解代码片段

时间:2014-07-19 05:05:09

标签: c

我无法理解代码如何给出输入的素数因子的输出。这段代码中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

4 个答案:

答案 0 :(得分:0)

temp未使用。一旦找到因子,i = 1将检查因子重置为1

答案 1 :(得分:0)

此代码中包含..

i = 1 

重置我,因为你想要素数因素..否则,如果它让你增加你将得到像4和6的值..这将是错误的。

不使用

temp = i;

答案 2 :(得分:0)

这里根本没有使用temp变量。你可以从pgm中删除它。

i=1已完成,因此可以再次从值2开始检查余数if(number%i==0)

答案 3 :(得分:0)

如前所述,临时未使用。

打印素数的方法是反复尝试将数字除以最小数量。这就是i = 1的目的。

所以拿175.

首先,循环初始化为2.然后递增i直到175%i == 0.当发生这种情况时,它意味着我是175的因子。因此它打印i并将i除以175。这可以确保您不会重复计算该因子。在这里,这将首先发生在i == 5.所以现在,num = 175/5 = 35。

此时,i被重置为1.在循环块结束时发生的第一件事是i增加到2.所以现在再次查找最小因子。再次,它找到了5。

如果我没有设置为1,那么程序会继续上升,而且会错过5是175倍的事实。

最终,当我&gt;数字,该程序知道它已找到所有因素。这是因为因素必须小于它们的因素。

希望这有帮助。