把一个偶数拆成两个不同素数的和,有几种拆法呢?
Input : 输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。
Output : 对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。
Sample Input
30 26 0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
#include <cstdio> using namespace std; int prime[10000+5] = { 1,1 }; int count( int number ); int main() { int i, j; for( i=2; i<=5000; i++ ){ /*标记素数位置为0*/ if( prime[i] ) continue; else for( j=i+i; j <= 10000; j += i ) prime[j] = 1; } int number, temp; scanf("%d", &number ); while( number != 0 ){ printf("%d\n", count(number) ); scanf("%d", &number ); } return 0; } /* int count( int number ) { int total; int j, k; total = 0; for( j=2; j<number; j++ ){ for( k=number-2; k>j; k-- ){ if( j+k > number ) continue; else if( !prime[j] && !prime[k] && j+k == number ){ total ++; break; } else if( j+k < number ) break; } } return total; } */ int count( int number ) { int total; int j, k; total = 0; for( j=2; j<number/2; j++ ){ if( !prime[j] && !prime[number - j] ) total ++; } return total; } /*中间的注释部分同样可以判断,但是运行速度超级慢*/
|