Nearly prime numbers
Source : Unknown | |||
Time limit : 1 sec | Memory limit : 1 M |
Submitted : 4684, Accepted : 830
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.
InputInput consists of N+1 numbers. First is positive integer N (1<=N<=50000). Next N numbers followed by N. Each number is not greater than 109. All numbers separated by whitespace(s).
OutputWrite a line in output for each number of given sequence. Write Yes if given number is nearly prime and No in other case.
Sample Input1 6Sample Output
Yes
解题报告:
题意很简单。就是一个数是否能化成两个素数相乘。表示此题就是卡内存。代码如下:
#include <stdio.h>
bool isPrime(int n){
for (int m = 2; m * m <= n; m++)
if(n % m == 0)
return 0;
return 1;
}
int main(){
int prime[3500] = {2};
int i = 1, j = 3;
while (i < 3500){
if(isPrime(j))
prime[i++]=j;
j+=2;
}
int t, n;
scanf("%d", &t);
while (t--){
scanf("%d", &n);
bool b = false;
for(i = 0; prime[i] * prime[i] <= n; i++)
if(n%prime[i]==0&&isPrime(n/prime[i])){
printf("Yes\n");
b = true;
break;
}
if(!b)
printf("No\n");
}
return 0;
}