分拆素数和(数论)

B - 分拆素数和
Time Limit:1000MS    Memory Limit:32768KB    64bit IO Format:%I64d & %I64u
Submit Status Practice HDU 2098

Description

把一个偶数拆成两个不同素数的和,有几种拆法呢?
 

Input

输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。
 

Output

对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。
 

Sample Input

     
     
     
     
30 26 0
 

Sample Output

   
   
   
   
3 2 #include <iostream> #include <cstdio> using namespace std; const int MAXN = 1e6; int prime[MAXN]; bool is_prime[MAXN+1]; int main() {     int num, i, j, ans;     int p = 0, n = 1000000;     for( int i = 0; i<n; i++ )         is_prime[i] = true;     is_prime[0] = is_prime[1] = false;     for(int i = 2; i<=n; i++ )     {         if(is_prime[i])         {             prime[p++] = i;             for( int j = 2*i; j<=n; j+=i )                 is_prime[j] = false;         }     }     while( cin >> num && num )     {         ans = 0;         for( i=0; i<num; i++ )         {             if( prime[i]>num )                 break;             for( j=i+1; j<num; j++ )             {                 if( prime[j] >num )                 break;                 if(prime[i]+prime[j] == num)                 {                     ans++;                     break;                 }             }         }         cout << ans << endl;     }     return 0; } 水题。。。但是做的很爽

你可能感兴趣的:(分拆素数和(数论))