我已经是一只废桔了(素数筛选+二分查找)
来源:互联网 发布:淘宝天猫运营工作 编辑:程序博客网 时间:2024/06/06 00:42
题目链接:
估计很快重现赛就消失了,而且题目也找不到。
暂时链接(需登录)
题目大意:
输入一个数N,求大于大于N的第一个素数。(N<5000000)
解题过程:
- 比赛的时候,一看到这个的题,妥妥的要超时,然后打开了status一看,果然……于是直接放弃。
- 倒是想强行双重for把五百万内的素数打印出来存到文件里,然后复制到程序里开数组存起来,然后跑了20多分钟还没完,于是放弃了。
- 后来听题解时说是要素数筛选,然后突然想起来之前好像看到过,只跑一遍就可以把素数表打印出来。
- 然后二分查找也不是很熟练,于是专门去刷了几个题练了下手:
- 二分练习1
- 二分练习2
- 二分练习3
-
题目分析:
- 素数筛选打表。
- 二分查找,找出一个大于等于N的素数,并且这个素数的前一个素数小于N,如果这个素数是2的话就不用判断了。 -
AC代码:
#include<iostream>#include<cstdio>#include<cstring>#include<vector>using namespace std;const int MAX = 5123456;int data[MAX], tail;int book[MAX];void init(){ for (int i = 2; i < MAX; i++) { if (!book[i]) data[tail++] = i; else continue; int cnt = i; for (int j = 1; cnt*j < MAX; j++) book[cnt*j] = 1; }}int main(){ init(); int n; while (~scanf("%d", &n)) { int l = 0, r = tail, cur; while (true) { cur = (r + l)/2; if (data[cur] >= n && (cur == 0 || data[cur-1] < n)) break; if (data[cur] > n) r = cur; else if (data[cur] < n) l = cur; } printf("%d %d\n", cur+1, data[cur]); }}
1 0
- 我已经是一只废桔了(素数筛选+二分查找)
- hdoj 4715 Difference Between Primes 素数筛选+二分查找
- 我已经是一只废桔了
- 筛选法快速查找素数
- 素数筛选法--快速查找素数
- 筛选法查找100以内的素数
- 筛选法查找100以内的素数
- 快速查找素数 187 (筛选找素数 模板)
- NYOJ-187-快速查找素数(素数筛选法)
- 我已经变好了
- 我所知的素数筛选法
- as3.0二分查找----- 已经封装
- 素数筛选
- 筛选素数
- 素数筛选
- 筛选素数
- 素数筛选
- 筛选素数
- Oracle服务端和客户端版本补丁不一致造成Tuxedo应用程序出core案例
- linux 安装 ruby on rails
- 自定义Viewgroup(2)--可滚动的横向布局
- CAA Device Diagnosis Example
- 没有时间看MOOC怎么办?
- 我已经是一只废桔了(素数筛选+二分查找)
- 基于TI-RTOS的CC2650DK开发(13)---门
- Hbase葱岭探秘--过滤器Api
- 在Mac系统上配置Android真机调试环境
- 协作型过滤应用——提供推荐
- 自定义viewgroup(3)--可滚动,但是超过边界会回弹
- 用栈和队列实现回文判断
- 七大排序算法代码
- Redis 单机性能测试