51 Nod 1441 质因子筛
来源:互联网 发布:java引入js跨域 编辑:程序博客网 时间:2024/06/05 00:23
题目链接
题目来源: Codeforces
题意很好理解,简单归纳总结之后能发现此题本质就是求1~n每个数的质因子个数的前缀和。
因为时限6000ms,我先将1~5e6的素数 线性筛出来,然后1~5e6预处理遍历,然后求前缀和,3000ms+过掉此题
弱者的预处理:
void init(){ vis[0] = vis[1] = 1; tot = 0; for(int i=2 ;i<A ;i++){ if(vis[i] == 0){ cnt[i]++; pri[++tot] = i; } for(int j=1 ;j<=tot&&i*pri[j]<A ;j++){ vis[i*pri[j]] = 1; if(i % pri[j] == 0) break; } } for(int i=2 ;i<A ;i++){ int now = i; for(int j=1 ;j<=tot && pri[j]*pri[j]<=now ;j++){ if(now % pri[j] == 0){ while(now % pri[j] == 0){ cnt[i]++; now /= pri[j]; } if(now <= 1) break; if(vis[now] == 0){cnt[i]++;break;} } } } sum[0] = sum[1] = 0; for(int i=2 ;i<A ;i++){ sum[i] = sum[i-1] + cnt[i]; }}
然后看了tls的代码,发现原来只需要在线性筛的时候稍微改动一下就好了,道理也很好理解。我们每次是枚举了一个质数去
强者的预处理:(真是巧妙啊~
void init(){ vis[0] = vis[1] = 1; sum[0] = sum[1] = 0; tot = 0; for(int i=2 ;i<A ;i++){ if(vis[i] == 0){ pri[++tot] = i; vis[i] = 1; } for(int j=1 ;j<=tot&&i*pri[j]<A ;j++){ vis[i*pri[j]] = vis[i] + 1; if(i % pri[j] == 0) break; } sum[i] = sum[i-1] + vis[i]; }}
阅读全文
0 0
- 51 Nod 1441 质因子筛
- 51nod 1189 阶乘分数 (质因子分解,因子个数)
- 51Nod-1240 莫比乌斯函数(质因子个数)
- 51nod 1189 阶乘分数(阶乘素因子分解)
- 阶乘的素因子分解 51nod 1189
- 51nod 1189 阶乘分数 [因子个数+逆元]【数论】
- 51 nod oj 1189 素因子分解+逆元
- 只包含因子2 3 5 的数----51Nod
- 51nod 1189 阶乘分数 (分解质因子加上逆元,乘法逆元基本意思)
- 51nod 1010 只包含因子2 3 5的数 (打表+二分)
- 【因子5的个数】1003 阶乘后面0的数量【51nod】
- 51 NOD 1189 阶乘分数(素因子分解+推公式+求逆元)
- 51NOD 1010 只包含因子2 3 5的数(二分 + 预处理)
- 51nod 1010 因子只有2 3 5 的数 也就是 丑数
- 51nod 1010 只包含因子2 3 5的数
- 51nod:1010 只包含因子2 3 5的数
- 51nod 1010 只包含因子2 3 5的数
- 51nod 1010 只包含因子2 3 5的数(打表+二分)
- 第二类莫比乌斯反演
- 6410 移植busybox+X+matchbox+gtk笔记
- js常用的自带的函数属性
- SQLServer 按日,周,月,季,年统计
- Django-xadmin的使用
- 51 Nod 1441 质因子筛
- 九度OJ
- Linux parted磁盘分区
- 立方星CubeSat
- 如何解决滑动冲突
- python range的最简单用法
- ffmpeg的新东东:AVFilter
- CodeForces 550 D.Regular Bridge(构造)
- lua 修改字体属性