C 分解素因数
比如 输入120,输出120 = 2 2 2 3 5
当然结果还是没有完全按照这个来输出,基本思路是实现了的。
可是最终我用的是递归,递归么……咳咳
#include <stdio.h>
int Prime(int num);
int main(void)
{
int num, array[50];
printf("请输入一个数: ");
scanf("%d", &num);
printf("%d = ", num);
Prime(num);
return 0;
}
int Prime(int num)
{
int i;
for (i = 2; i <= num; i++)
if (num % i == 0) {
printf("% d", i);
return (Prime(num / i));
}
}
这个递归思路很简单,一目了然吧(我也只写得出这个等级的递归了……)
关于算法思路来自:C 关于素数的两道题和相关算法
但是!完全可以不用递归!
#include <stdio.h>
int main(void)
{
int num, i;
scanf("%d", &num);
for (i = 2; num > 1; ) {
if (num % i == 0)
printf("%d ", (num /= i, i));
else
++i;
}
putchar('\n');
return 0;
}
这里这个也很好理解,首先假设120,除以2之后我们试试还能不能被2除,这样除完了以后就能排除比如4之类的情况的干扰了,如果2不能再除了,那么i变成3接着来。
关于
printf("%d ", (num /= i, i))
在C 逗号运算符里提到了解释。
so cool~
植入部分
如果您觉得文章不错,可以通过赞助支持我。
如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。