【ECJTU_ACM 11级队员2012年暑假训练赛(7) - G - Prime Sum】

G - Prime Sum
Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

Description

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

Input

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

Output

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

Sample Input

30 26 0
 

Sample Output

3 2
 
 
================================================================================================================================
 
巨水数论题,,额,等等,,这个算数论题么???
================================================================================================================================
 
 1 #include <iostream>
 2 #include <stdio.h>
 3 using namespace std;
 4 
 5 #define MAXN 10010
 6 
 7 bool prime[MAXN];
 8 
 9 void iMakePrime()
10 {
11     for (int i = 0; i < MAXN; i++)
12     {
13         prime[i] = true;
14     }
15     prime[0] = false;
16     prime[1] = false;
17     int iCurrent = 2;
18     for (iCurrent = 2; iCurrent * iCurrent < MAXN; iCurrent++)
19     {
20         if (prime[iCurrent] == true)
21         {
22             for (int j = iCurrent * iCurrent; j < MAXN; j += iCurrent)
23             {
24                 prime[j] = false;
25             }
26         }
27     }
28 }
29 
30 
31 void showmap()
32 {
33     for (int i = 0; i < 100; i++)
34     {
35         printf("%d ", iMap[i]);
36     }
37 }
38 
39 int main()
40 {
41     iMakePrime();
42     showmap();
43     int iNum;
44     while (scanf("%d", &iNum) && iNum != 0)
45     {
46         int iCount = 0;
47         for (int i = 2; i * 2 < iNum; i++)
48         {
49             if (prime[i] == true && prime[iNum-i] && true)
50             {
51                 iCount++;
52             }
53         }
54         printf("%d\n", iCount);
55     }
56     return 0;
57 }
58 
59 // end
60 // ism

 

posted @ 2012-08-05 23:51  ismdeep  阅读(255)  评论(0编辑  收藏  举报