博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
loj#6235. 区间素数个数(min25筛)
阅读量:6481 次
发布时间:2019-06-23

本文共 994 字,大约阅读时间需要 3 分钟。

题意

Sol

min25筛的板子题,直接筛出\(g(N, \infty)\)即可

筛的时候有很多trick,比如只存\(\frac{N}{x}\)的值,第二维可以滚动数组滚动掉

#include
#define LL long long//#define int long long using namespace std;const int MAXN = 2e6 + 10;int Lim, vis[MAXN], prime[MAXN], tot;LL N, g[MAXN], id[MAXN], cnt, pos1[MAXN], pos2[MAXN];void Get(int N) { vis[1] = 1; for(int i = 2; i <= N; i++) { if(!vis[i]) prime[++tot] = i; for(int j = 1; j <= tot && i * prime[j] <= N; j++) { vis[i * prime[j]] = 1; if(!(i % prime[j])) break; } }}LL get(LL x) { return x <= Lim ? pos1[x] : pos2[N / x];}signed main() { cin >> N; Lim = sqrt(N); Get(Lim); for(LL i = 1, j; i <= N; i = N / j + 1) { j = N / i; id[++cnt] = j; g[cnt] = id[cnt] - 1; j <= Lim ? pos1[j] = cnt : pos2[N / j] = cnt;; } for(int j = 1; j <= tot; j++) for(LL i = 1; 1ll * prime[j] * prime[j] <= id[i]; i++) g[i] -= g[get(id[i] / prime[j])] - (j - 1); cout << g[1]; return 0;}

转载地址:http://utfuo.baihongyu.com/

你可能感兴趣的文章
fn project 运行时配置选项
查看>>
你的leader还在考核你的千行代码Bug率吗?
查看>>
多块盘制作成一个lvm
查看>>
InnoDB多版本
查看>>
贪心算法 - 活动选择问题
查看>>
独立思考与输入、吸收
查看>>
es6 includes(), startsWith(), endsWith()
查看>>
关于azkaban上传job压缩包报错问题的解决方案
查看>>
JS版日期格式化和解析工具类,毫秒级
查看>>
百度人脸对比
查看>>
Linux内存管理 一个进程究竟占用多少空间?-VSS/RSS/PSS/USS
查看>>
苹果AppStore如何申请加急审核
查看>>
SpringBoot 使用Swagger2打造在线接口文档(附汉化教程)
查看>>
Mysql一个表编码的坑,mark一下
查看>>
JS动态事件绑定问题
查看>>
在WPF应用程序中利用IEditableObject接口实现可撤销编辑的对象
查看>>
android 8 wifi wifi 扫描过程
查看>>
phalcon的save方法保存失败?
查看>>
获取任意链接文章正文 API 功能简介
查看>>
js中Math.random()生成指定范围数值的随机数
查看>>