《数据结构学习与实验指导》2-7:素因子分解

实验内容:给定某个正整数N,求其素因子分解结果,即给出其因式分解表达式N=p1^k1*p2^k2*……。
输入说明:输入正整数N。
输出说明:按给定格式输出N的素因式分解表达式,其中pi为素因子并要求由小到大输出,指数ki为pi的个数;当ki==1时,不输出ki。
测试用例:
输入 | 输出
1024 | 1024=2^10
1323 | 1323=3^3*7^2
97532468 | 97532468=2^2*11*17*101*1291
1 | 1=1
3 | 3=3

#include 

int isPrime(long num) {
    if (num == 1) {
        return 0;
    }
    if (num == 2) {
        return 1;
    }
    if (num % 2 == 0) {
        return 0;
    }
    for (long i = 3; i < num; i = i + 2) {
        if (num % i == 0) {
            return 0;
        }
    }
    return 1;
}

long findNextPrime(long num) {
    if (num % 2 == 0) {
        num++;
    } else {
        num += 2;
    }
    while (! isPrime(num)) {
        num = num + 2;
    }
    return num;
}

long N;
int First = 1;

int main() {
    scanf("%ld", &N);
    if (N == 1) {
        printf("1=1");
    } else {
        long num = N;
        long prime = 2;
        while (num != 1) {
            int count = 0;
            while (num % prime == 0) {
                num /= prime;
                count ++;
            }
            if (count > 0) {
                if (First) {
                    printf("%ld=%ld", N, prime);
                    First = 0;
                } else {
                    printf("*%ld", prime);
                }
                if (count > 1) {
                    printf("^%d", count);
                }
            } else {
                prime = findNextPrime(prime);
            }
        }
    }
    printf("\n");
    return 0;
}

你可能感兴趣的:(算法学习)