美素数备忘
2015-06-07 16:11
260 查看
#include<stdio.h> #include<math.h> #define maxn 1000000+1 int prime[maxn]; int count[maxn]; bool is_beauty_prime(int n); int tot = 0; void getPrime() { int i, j; int tmp = int((double)sqrt(maxn) + 1); for(i = 2; i < maxn; i++) { prime[i] = 1; } for(i = 2; i < maxn; i++) { if(prime[i]) { if(i < tmp) { for(j = i*i; j < maxn; j+=i) prime[j] = 0; } } } for(i = 2; i < maxn; i++) { if(prime[i] && is_beauty_prime(i)) { count[++tot] = i; } } } bool is_beauty_prime(int n) { int tmp = 0; while(n) { tmp += n%10; n /= 10; } if(prime[tmp]) return true; return false; } int binary_search(int l, int h, int num) { while(l <= h) { int mid = (l+h)/2; if(num == count[mid]) return mid; else if(count[mid] > num) { h = mid-1; } else { l = mid+1; } } return l; } int beauty_prime(int a, int b) { int i; int sum = 0; for(i = a; i <= b; i++) { if(prime[i]) { if(is_beauty_prime(i)) sum++; } } return sum; } int main() { int n, a, b, i, j; getPrime(); scanf("%d", &n); for(i = 1; i <= n; i++) { int top = 0; int down = 0; scanf("%d %d", &a, &b); down = binary_search(1, tot, a); top = binary_search(1, tot, b); if(count[top] == b)top++; down--; int num = top-down-1; printf("Case #%d: %d\n", i, num); } }
相关文章推荐
- 黑马程序员_面向对象(多态)
- 线性表节点
- 关于unterminated argument list invoking macro \”%s\”"
- iOS CoreData详解(七)性能相关
- BZOJ 1726: [Usaco2006 Nov]Roadblocks第二短路( 最短路 )
- leetcode[83]:Remove Duplicates from Sorted List
- iOS开发UI高级—10使用picker View控件完成一个简单的选餐应用
- 7 Steps for Learning Data Mining and Data Science
- 【SDUT 3253】 Game!
- 剑指oofer 62 - 序列化二叉树
- C/C++ 语言中的表达式求值
- ssh密钥登录-不用输入密码
- Datazen配置
- 什么是云服务器私有网络和防火墙
- 黑马程序员——Java基础——多线程
- 对datagridview进行增删改(B)
- 什么是云硬盘、云镜像和硬盘快照
- 什么是云数据库
- 使用微信支付后调回到自己客户端
- Datazen配置