Pagini recente » Cod sursa (job #2834611) | Cod sursa (job #1200785) | Cod sursa (job #868260) | Cod sursa (job #401701) | Cod sursa (job #586306)
Cod sursa(job #586306)
#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, ok = 0;
for (i = 1; i <= N; i++) {
if ( (B[i]&1) == 1 ) {
sol*= A[i];
ok = 1;
break;
}
}
if (!ok) sol = A[1];
int gr = nn / sol;
if (sol <= 2) for (i = 1; i <= sol; i++)
printf ("%d ", gr);
else printf ("%d %d", gr, nn - 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;
}