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"; } };