標籤:style http color width os for
題目串連:uva 10622 - Perfect P-th Powers
題目大意:對於x,如果存在最大的p,使得有整數滿足x=bp,則稱x為perfect pth power。現在給出x,求p。
解題思路:將x分解質因子,所有置因子的個數的最大公約數即為所求p,需要注意的是x為負數的時候,p必須為奇數。特別注意x=-1。
#include <cstdio>#include <cstring>#include <cmath>const int maxp = 333333;int cp, v[maxp], prime[maxp];int gcd (int a, int b) { return b == 0 ? a : gcd(b, a%b);}void primeTable (int n) { memset(v, 0, sizeof(v)); cp = 0; for (int i = 2; i < n; i++) { if (!v[i]) { prime[cp++] = i; for (int j = 2 * i; j < n; j += i) v[j] = 1; } }}int divFactor (long long n) { int ans = 0; for (int i = 0; i < cp && prime[i] <= n; i++) { if (n % prime[i] == 0) { int cnt = 0; while (n % prime[i] == 0) { n /= prime[i]; cnt++; } ans = gcd(ans, cnt); } } if (n > 1 || ans == 0) ans = 1; return ans;}int main () { primeTable(maxp); long long n; while (scanf("%lld", &n) == 1 && n) { int ans = divFactor(n < 0 ? -n : n); if (n < 0) { while (ans%2 == 0) ans /= 2; } printf("%d\n", ans); } return 0;}