// UVa 10622 - Perfect P-th Powers
#include <iostream>
#include <stdio.h>
#include <vector>
#include <string.h>
#include <math.h>
#include <cmath>
using namespace std;
#define integer signed long long
#define max_prime 100000
bool isprime[max_prime];
vector<int> prime;
int gcd(int a, int b) {
if (b == 0)
return a;
else
return gcd(b, a % b);
}
int main() {
// sieve
memset(isprime, true, sizeof(isprime));
for (int i = 4; i < max_prime; i += 2)
isprime[i] = false;
prime.push_back(2);
for (integer i = 3; i < max_prime; i += 2) {
if (isprime[i]) {
prime.push_back(i);
for (integer j = i * i; j < max_prime; j += (i << 1))
isprime[j] = false;
}
}
// problem
while (true) {
integer n;
cin >> n;
if (n == 0)
break;
integer m = abs(n), sol = 1;
bool first = true;
for (int i = 0; i < prime.size(); i++) {
int e = 0;
while (m % prime[i] == 0) {
m /= prime[i];
e++;
}
if (e > 0) {
if (first) {
sol = e;
first = false;
} else
sol = gcd(sol, e);
if (sol == 1 || m == 1)
break;
}
}
if (m != 1)
sol = 1;
if (n < 0) {
while ((sol & 1) == 0)
sol >>= 1;
}
cout << sol << endl;
}
return 0;
}
Wednesday, May 13, 2015
UVa 10622 - Perfect P-th Powers
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment