题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4548
考查素数打表
#include <cstdio>
#define MAX 1000000 + 10
int prime[MAX];
int table[MAX];
int getSum( int n ) {
int sum = 0;
while( n ) {
sum = sum + n % 10;
n = n / 10;
}
return sum;
}
void getPrimeTable() {
int cnt = 0;
for( int i = 2; i < MAX; i++ ) {
if( prime[i] == 0 ) {
int sum = getSum( i );
if( prime[sum] == 0 ) {
cnt++;
}
for( int j = i + i; j < MAX; j = j + i ) {
prime[j] = 1;
}
}
table[i] = cnt;
}
}
int main() {
getPrimeTable();
int T;
int i = 1;
scanf( "%d", &T );
while( i <= T ) {
int left, right;
scanf( "%d%d", &left, &right );
printf( "Case #%d: %d\n", i++, table[right] - table[left - 1] );
}
return 0;
}