我正在制定一个程序来查找给定数字的素数因子 虽然程序运行正常,但我有两个问题 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++;
}
}
}
答案 0 :(得分:4)
它总是打印2,因为print语句不是测试mod 0的if的一部分。它进入无限循环,因为一旦传递i,第二个while循环将永远不会退出。
答案 1 :(得分:2)
无限循环是您的第二个while
循环,while(i%a!=0)
。对于素数,这将持续不断。有一些聪明的方法可以解决这个问题,但至少要将其改为
while(i%a!=0 && a<=i)
我不确定为什么2会出现奇数,仍在考虑这部分。
编辑正如Fred所说,打印输出不是if语句的一部分,导致2总是出现。就个人而言,我建议养成{ }
语句之后始终放if
的习惯。即使你已经编写了几十年,这也将确保你能在你的条件下得到正确的陈述。