CodeSky 代码之空

随手记录自己的学习过程

C 分解素因数

2014-03-14 14:39分类: C评论: 0

比如 输入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)