// UVa 10139 - Factovisors #include <iostream> #include <vector> #include <string.h> #include <stdio.h> using namespace std; #define integer unsigned long long int main() { bool isprime[65536]; memset(isprime, true, sizeof(isprime)); vector<integer> prime; for (integer i = 2; i < 65536; i++) if (isprime[i]) { prime.push_back(i); for (integer j = i * i; j < 65536; j += i) isprime[j] = false; } integer n, mm; while (cin >> n >> mm) { vector<integer> factor, expo; integer m = mm; for (int i = 0; i < prime.size() && m > 1; i++) { if (m % prime[i] == 0) { factor.push_back(prime[i]); expo.push_back(0); while (m % prime[i] == 0) { expo[expo.size() - 1]++; m /= prime[i]; } } } if (m > 1) { factor.push_back(m); expo.push_back(1); } bool divides = (mm != 0); for (int i = 0; i < factor.size(); i++) { integer j = n; int count = 0; while (j >= factor[i]) { j /= factor[i]; count += j; } if (count < expo[i]) { divides = false; break; } } if (divides) printf("%llu divides %llu!\n", mm, n); else printf("%llu does not divide %llu!\n", mm, n); } return 0; }
Tuesday, June 16, 2015
UVa 10139 - Factovisors
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment