C 分解素因数
比如 输入120,输出120 = 2 * 2 * 2 * 3 * 5
当然结果还是没有完全按照这个来输出,基本思路是实现了的。 可是最终我用的是递归,递归么……咳咳
1#include <stdio.h>
2
3int Prime(int num);
4
5int main(void)
6{
7 int num, array[50];
8
9 printf("请输入一个数: ");
10 scanf("%d", &num);
11 printf("%d = ", num);
12 Prime(num);
13
14 return 0;
15}
16
17int Prime(int num)
18{
19 int i;
20
21 for (i = 2; i <= num; i++)
22 if (num % i == 0) {
23 printf("% d", i);
24 return (Prime(num / i));
25 }
26}
27
这个递归思路很简单,一目了然吧(我也只写得出这个等级的递归了……) 关于算法思路来自:C 关于素数的两道题和相关算法
但是!完全可以不用递归!
1#include <stdio.h>
2
3int main(void)
4{
5 int num, i;
6
7 scanf("%d", &num);
8
9 for (i = 2; num > 1; ) {
10 if (num % i == 0)
11 printf("%d ", (num /= i, i));
12 else
13 ++i;
14 }
15 putchar('\n');
16
17 return 0;
18}
19
这里这个也很好理解,首先假设120,除以2之后我们试试还能不能被2除,这样除完了以后就能排除比如4之类的情况的干扰了,如果2不能再除了,那么i变成3接着来。
关于
1 printf("%d ", (num /= i, i))
2
在C 逗号运算符里提到了解释。
so cool~
评论 (0)