POJ-1365 Prime Land 단순 소수 분해

6481 단어 Prim
코드는 다음과 같습니다.
#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 == '
') { 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; }

좋은 웹페이지 즐겨찾기