标签:
Description
Input
Output
Sample Input
Sample Output
1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 const int M = 1000010; 5 int isprime[M]; 6 int isbuprime_sum[M]; 7 void prime() 8 { 9 memset(isprime, 0, sizeof(isprime)); 10 memset(isbuprime_sum, 0, sizeof(isbuprime_sum)); 11 isprime[0] = 1; 12 isprime[1] = 1; //初始化 13 for (int i = 2; i < M; i++) 14 { 15 if (isprime[i]) //判断,是合数就直接跳过 16 continue; 17 for (int j = i+i; j < M; j += i) //先把素数的倍数(就是合数)都标记好 18 { 19 isprime[j] = 1; 20 } 21 } 22 } 23 24 int sumsum(int k) 25 { 26 int sum = 0; 27 while (k) 28 { 29 sum += k % 10; //各个位数的和,以便后面判断 30 k /= 10; 31 } 32 return sum; 33 } 34 35 int main() 36 { 37 prime(); 38 isbuprime_sum[0] = isbuprime_sum[1] = 0; 39 for (int i = 2; i < M; i++) 40 { 41 if (!isprime[i] && !isprime[sumsum(i)]) //之前素数被标记为0了 42 isbuprime_sum[i] = isbuprime_sum[i - 1] + 1; //是美素数就计一次数 43 else 44 isbuprime_sum[i] = isbuprime_sum[i - 1]; //不是美素数,当前计数不变 45 } 46 int T,ans=1; 47 cin >> T; 48 while (T--) 49 { 50 int R, L; 51 cin >> L >> R; 52 cout << "Case #" << ans++ << ": " << isbuprime_sum[R] - isbuprime_sum[L - 1] << endl; //输出L-1因为包括左右端点 53 54 } 55 56 return 0; 57 }
心得:
再get一招,可以这样找素数,简直棒棒的,哈哈,集训太快了,转眼就快结束了。还真有点舍不得就回家了呢,说多了,学到知识更重要,加油加油啦~~~~~~~?(^∇^*)
标签:
原文地址:http://www.cnblogs.com/Lynn0814/p/4738936.html