【ECJTU_ACM 11级队员2012年暑假训练赛(7) - G - Prime Sum】
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