Nearly prime number is an integer positive number for which it is possible to find such primes P1 and P2 that given number is equal to P1*P2. 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≤N≤10). Next N numbers followed by N. Each number is not greater than 109. 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.
Sample Input
1
6
Sample Output
Yes
题意:
Nearly prime number就是指一个数可以拆成两个素数的乘积
给你一个数,如果是Nearly prime number就输出Yes,否则输出No
代码如下:
#include<iostream>
#include <cstdio>
#include <string.h>
#include <math.h>
using namespace std;
typedef long long ll;
int prime(ll n)
{
ll t = sqrt(n), i;
for (i = 2; i <= t; i++)
{
if (n % i == 0)
{
return 0;
break;
}
}
return 1;
}
int main()
{
#ifndef ONLINE_JUDGE
//freopen("1.txt", "r", stdin);
#endif
int t;
long long n, i, m;
bool flag;
cin >> t;
while(t--)
{
flag = false;
cin >> n;
m = sqrt(n);
for (i = 2; i <= m; i++)
{
if (n%i == 0 && prime(i))
{
if(prime(n/i))
{
flag = true;
break;
}
}
}
if (flag)
{
cout << "Yes" << endl;
}
else
{
cout << "No\n";
}
}
return 0;
}