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~

植入部分

如果您觉得文章不错,可以通过赞助支持我。

如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。

标签: 源码, 代码段, 题目

添加新评论