Cod sursa(job #585765)

Utilizator katakunaCazacu Alexandru katakuna Data 30 aprilie 2011 11:43:04
Problema NumMst Scor 0
Compilator cpp Status done
Runda Algoritmiada 2011, Runda Finală, Clasele 10-12 Marime 1.1 kb
#include <cstdio>
#include <math.h>
#include <algorithm>
#include <string.h>
using namespace std;

#define Nmax 10000010

int n, rad, nn, N;
int ciur[10010], prime[10010];
int A[Nmax], B[Nmax];

void rezolva () {

    int i, p = 1;
    while (n != 1 && p <= prime[0]) {

        if (n % prime[p] == 0)
            A[++N] = prime[p];

        while ( n % prime[p] == 0 ) {
            B[N]++;
            n/= prime[p];
        }

        p++;
    }

    if (n != 1) {
        A[++N] = n;
        B[N] = 1;
    }


    int sol = 1;
    for (i = 1; i <= N; i++) {
        if ( (B[i]&1) == 1 )
            sol*= A[i];
    }

    int gr = nn / sol;
    for (i = 1; i <= sol; i++)
        printf ("%d ", gr);
}

void Ciur () {

    int i, j;
    for (i = 2; i <= rad; i++)
        if (!ciur[i]) {
            prime[ ++prime[0] ] = i;
            for (j = i + i; j <= rad; j+= i)
                ciur[j] = 1;
        }
}

int main () {

    freopen ("nummst.in", "r", stdin);
    freopen ("nummst.out", "w", stdout);

    scanf ("%d", &n);

    rad = (int) sqrt (n) + 1;
    nn = n;

    Ciur ();
    rezolva ();

    return 0;
}