POJ-1365 Prime Land 简单素数分解

代码如下:

#include <cstdlib>

#include <cstring>

#include <cmath>

#include <cstdio>

using namespace std;



int p[40010], a[10000], b[10000];



void pre()

{

    for (int i = 4; i <= 40010; i += 2) {

        p[i] = 1;

    }

    for (int i = 3; i <= 200; i += 2) {

        if (!p[i]) {

            int k = 2 * i;

            for (int j = i*i; j <= 40010; j += k) {

                p[j] = 1;

            }

        }

    }

}



int _pow(int a, int b)

{

    int ans = 1;

    for (int i = 1; i <= b; ++i) {

        ans *= a;

    }    

    return ans;

}



int main()

{

    int cnt = 0, num = 1;

    pre();

    while (scanf("%d", &a[cnt]), a[cnt]) {

        scanf("%d", &b[cnt]);

        char t = getchar();

        if (t == '\n') {

            for (int i = 0; i <= cnt; ++i) {

                num *= _pow(a[i], b[i]);

            }

            num -= 1;

            int first = 1;

            for (int i = num; i >= 2; --i) {

                if (!p[i]) {

                    int c = 0;

                    while (num % i == 0) {

                        c++;

                        num /= i;

                    }

                    if (c) {

                        if (first) {

                            printf("%d %d", i, c);

                            first = 0;

                        }

                        else {

                            printf(" %d %d",i, c);

                        }

                    }

                }

            }

            puts("");

            cnt = 0;

        }

        else if (t == ' '){

            ++cnt;

        }

    }

    return 0;

}

你可能感兴趣的:(Prim)