解いた問題

4/25/2012

SRM517 Div1 Easy

250

T == N
Tが素数で、Nがその素数で割れる。
TとNが同じ素数の累乗で、Tが2乗以下

以上の3パターンしか Yes の場合はないはず。



bool is_prime(int n)
{
  for (int i = 2; i * i <= n; ++i) {
    if (n % i == 0) return false;
  }
  return true;
}

class CompositeSmash {
public:
  string thePossible(int N, int T)
  {
    if (T > N) return "No";
    if (N == T) return "Yes";
    if (N % T == 0 && is_prime(T)) return "Yes";

    for (int i = 2; i * i <= N; ++i) {
      if (!is_prime(i)) continue;
      int n = N, t = T;
      int cnt = 0;

      while (n % i == 0) n /= i;       
      while (t % i == 0) {
        t /= i;
        ++cnt;
      }

      if (t == 1 && n == 1)  {
        if (cnt <= 2) return "Yes";
      }
    }
    return "No";
  }
};