HOJ 1015 Nearly prime numbers

代码
//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.
#include <stdio.h>
#include 
<stdlib.h>
#include 
<math.h>

//decide n whither is a nearly prime number or not,
//is then return true,or return false.
bool isNPN(int n);
//decide n whither is a prime number or not,
//is then return true,or return false.
bool isPrime(int n);

int main()
{
    
int input[50000];    
    
int num;
    
    
//input
    scanf("%d"&num);
    
for (int i=0; i<num; i++)
    {
        scanf(
"%d"&input[i]);
    }

    
//start resolve the problem here
    for (int i=0; i<num; i++)
    {
        
if (isNPN(input[i]))
        {
            printf(
"Yes\n");
        }
        
else
        {
            printf(
"No\n");
        }
    }

    
return 0;
}

bool isNPN(int n)
{
    
int m = (int)sqrt((double)n) + 1;

    
if (n%2==0 && isPrime(n/2))
    {
        
return true;
    }
    
for (int i=3; i<m; i+=2)
    {
        
if (n%== 0 && isPrime(i))
        {
            
if (isPrime(n/i))
            {
                
return true;
            }
        }
    }
    
return false;
}

bool isPrime(int n)
{
    
int m = (int)sqrt((double)n) + 1;
    
    
if (n == 2)
    {
        
return true;
    }
    
if (n%2 == 0)
    {
        
return false;
    }
    
for(int i=3; i<m; i+=2)
    {
        
if (n%i==0)
        {
            
return false;
        }
    }
    
return true;
}

 

posted on 2010-04-17 12:00  Lowtec  阅读(403)  评论(0编辑  收藏  举报

导航