Hdu 2098 分拆素数和

简单模拟。

CODE:

#include <stdio.h>
#include <stdlib.h>
#include < string.h>
#include <algorithm>
#include <math.h>
using  namespace std;

const  int SIZE =  10001;

int prime[SIZE];
int vis[SIZE] = { 0};
int cnt;

void init()
{
     int i, j;
    cnt =  0;
     for(i =  2; i < SIZE ; i++)  if(!vis[i])
    {
        prime[cnt++] = i;
         for(j =i*i; j < SIZE; j+=i) vis[j] =  1;
    }
}


int is_prime( int n )
{
     int i, j;
     int m = ( int)sqrt(n+ 0.5);
     for(i =  2; i <= m; i++)
    {
         if(n%i ==  0return  0;
    }
     return  1;
}


int main()
{
     int i, j;
     int n;
    init();
     while(scanf( " %d ", &n), n)
    {
         int cnt =  0;
         for(i =  0; i < SIZE && prime[i] < n/ 2; i++)
        {
             int dif = n-prime[i];
             if(is_prime(dif)) cnt++;
        }
        printf( " %d\n ", cnt);
    }
     return  0;

} 

你可能感兴趣的:(HDU)