113. Nearly prime numbers¶
time limit per test: 0.25 sec / memory limit per test: 4096 KB
Nearly prime number is an integer positive number for which it is possible to find such primes P 1 and P 2 that given number is equal to \(P_1 * P_2\). There is given a sequence on N integer positive numbers, you are to write a program that prints “Yes” if given number is nearly prime and “No” otherwise.
Input
Input file consists of N+1 numbers. First is positive integer N (\(1 \le N \le 10\)). Next N numbers followed by N. Each number is not greater than \(10^9\). All numbers separated by whitespace(s).
Output
Write a line in output file for each number of given sequence. Write “Yes” in it if given number is nearly prime and “No” in other case.
Example(s)
| Sample Input | Sample Output |
1
6
|
Yes
|
| Author | Resource | Date |
|---|---|---|
| : Michael R. Mirzayanov | : PhTL #1 Training Contests | : Fall 2001 |
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <string>
#include <sstream>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <ctime>
#define inf 0x3f3f3f3f
#define Inf 0x3FFFFFFFFFFFFFFFLL
#define rep(i, n) for (int i = 0; i < (n); ++i)
#define Rep(i, n) for (int i = 1; i <= (n); ++i)
#define clr(x, a) memset(x, (a), sizeof x)
using namespace std;
typedef long long ll;
int main() {
int T; scanf("%d", &T);
while (T--) {
int n; scanf("%d", &n);
int cc = 0;
for (int i = 2; i * i <= n; ++i) {
while (n % i == 0) {
n /= i; ++cc;
}
if (cc > 2) break;
}
if (n > 1) ++cc;
if (cc == 2) puts("Yes");
else puts("No");
}
return 0;
}