/* File: 10139.cpp Author: ACboy Date: 2010-4-22 Result: AC Descripition: UVa 10139 Factovisors */ #include <iostream> #include <cmath> #include <set> #include <map> using namespace std; map<long, int> m; set<long> s; // 求n!中素数p的指数。 int prime_num(long p, long n) { int num = 0; for (long i = p; i <= n; i *= p) { num += n / i; } return num; } // 一个数的素数分解。 void prime_factorization(long a) { int i; m.clear(); s.clear(); while (a % 2 == 0) { if (m.find(2) != m.end()) { m[2]++; } else { m[2] = 1; s.insert(2); } a /= 2; } i = 3; while (i <= (sqrt(double(a)) + 1)) { if (a % i == 0) { if (m.find(i) != m.end()) { m[i]++; } else { m[i] = 1; s.insert(i); } a /= i; } else { i += 2; } } if (a > 1) { if (m.find(a) != m.end()) { m[a]++; } else { m[a] = 1; } s.insert(a); } } int main() { long long n, M; #ifndef ONLINE_JUDGE freopen("10139.txt", "r", stdin); #endif while (cin >> n >> M) { prime_factorization(M); set<long>::iterator it; int ok = 1; for (it = s.begin(); it != s.end(); it++) { if (prime_num(*it, n) < m[*it]) { ok = 0; break; } } if (ok) { cout << M << " divides " << n << "!" << endl; } else { cout << M << " does not divide " << n << "!" << endl; } } return 0; }