// 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