1

我正在制作一个程序来查找给定数字的质因数。
虽然程序运行良好,但我有两个问题。
1. 当我输入一个奇数时,它会在结果中打印 2,尽管 2 不应该在其中。
2. 15秒后变成无限循环,真是毛骨悚然。

#include<stdio.h>
#include<conio.h>
int num(int); // Making a function for finding prime factors
int main()
{
    int i,j;
    printf("Enter any number");
    scanf("%d",&i);
    num(i);

    getch();

    }

int num(int i)
{

    int a=2;
    while(a<=i)
    {

        if(i%a==0) //if the number is divisible then divide it
            i=i/a;

        printf(" %d",a);

        if(i%a!=0) 
       {
            i%a;
            while(i%a!=0)// If it is not divisible by 2 then increment it until it is
                 a++;
       }

    }

}
4

2 回答 2

4

它总是打印 2,因为 print 语句不是测试 mod 0 的 if 的一部分。它进入无限循环,因为一旦 a 通过 i,第二个 while 循环将永远不会退出。

于 2013-08-02T18:38:06.680 回答
2

无限循环是您的第二个while循环,while(i%a!=0). 对于素数,这将无休止地继续下去。有一些聪明的方法可以解决这个问题,但至少,将其更改为

while(i%a!=0 && a<=i)

我不确定为什么 2 会出现在奇数上,但仍在考虑那部分。

编辑正如 Fred 提到的,打印输出不是 if 语句的一部分,导致 2 总是出现。就个人而言,我建议养成总是在声明{ }之后放置的习惯。if即使您已经编码了数十年,这也将确保您在您的情况下获得正确的陈述。

于 2013-08-02T18:38:02.593 回答