fork(1) download
  1. // Имеет ли число n в точности m простых делителей?
  2. // http://a...content-available-to-author-only...s.ru/problem.aspx?num=2102
  3. #include <iostream>
  4. #include <cmath>
  5. using namespace std;
  6. int main() {
  7. unsigned long long n, d = 2;
  8. cin >> n;
  9. int m = 20; // ищем m делителей числа n
  10. while (m > 0 && d <= pow(n, 1./max(2, m)) + 1e-10) {
  11. if (n % d == 0) { // если делитель найден,
  12. n /= d; // то делим
  13. m--; // и ищем на один делитель меньше
  14. } else d++; // иначе проверяем следующее число
  15. }
  16. cout << (m == 1? "Yes" : "No"); // найдено m делителей?
  17. return 0;
  18. }
Success #stdin #stdout 0.11s 3472KB
stdin
999999999987679232
8388608
10000000000
1048576
2
1000000000000000003
1000000000012845056
99999989699999923
stdout
Yes