[线性筛][筛素数/筛约数个数]
线性筛中每个数只会被最小的素因子筛一次
1)线性筛素数
1 void getprime(int siz){ 2 memset(isprime,1,sizeof(isprime)); 3 isprime[1]=0; 4 for(int i=2;i<=siz;i++){ 5 if(isprime[i])prime[++tot]=i; 6 for(int j=1;j<=tot&&i*prime[j]<=siz;j++){ 7 isprime[i*prime[j]]=0; 8 if(i%prime[j]==0)break; 9 } 10 } 11 }
2)线性筛约数个数
每个数的约数个数为(a1+1)*(a2+1)*...*(ak+1),首先如果数i是素数,可以直接得到约数个数w[i]=2,又由于线性筛的时候,每个数是被最小素因子筛掉,所以如果i%prime[j]!=0,那么prime[j]将是i*prime[j]的最小素数,并且个数为1,所以w[i*prime[j]]=w[i]*(1+1),如果i%prime[j]==0,那么prime[j]既是i*prime[j]的最小素数,又是i的最小素数(因为prime[j]是i*prime[j]的最小素数嘛,所以不可能存在比prime[j]更小的素数),所以此时w[i*prime[j]]=w[i]/(n[i]+1)*(n[i*prime[j]]+1),其中n[i]表示i的最小素数的个数,那么显然n[i*prime[j]]=n[i]+1
1 void getprime(int siz){ 2 memset(isprime,1,sizeof(isprime)); 3 isprime[1]=0; 4 for(int i=2;i<=siz;i++){ 5 if(isprime[i]){prime[++tot]=i;w[i]=2;ww[i]=1;} 6 for(int j=1;j<=tot&&i*prime[j]<=siz;j++){ 7 isprime[i*prime[j]]=0; 8 if(i%prime[j]!=0){ 9 w[i*prime[j]]=w[i]*2; 10 ww[i*prime[j]]=1; 11 } 12 else{ 13 ww[i*prime[j]]=ww[i]+1; 14 w[i*prime[j]]=w[i]/(ww[i]+1)*(ww[i*prime[j]]+1); 15 break; 16 } 17 } 18 } 19 }
转载于:https://www.cnblogs.com/MekakuCityActor/p/10911238.html
[线性筛][筛素数/筛约数个数]相关推荐
- 利用线性筛算法框架求解因数个数以及因数和问题
利用线性筛算法框架求解因数个数以及因数和问题 一 前言 关于线性筛算法,在前一篇文章 利用线性筛以及素数筛求某一范围内的所有素数中已经介绍过,若读者对线性筛算法不太了解或有所遗忘,可以点击链接查看.此 ...
- 筛表合集(素数筛 欧拉函数筛 莫比乌斯函数筛)
[目录] 一.素数筛 1.素数判断 2.素数普通筛 3.素数线性筛 4.素数区间筛 二.欧拉函数筛 三.莫比乌斯函数筛 [素数筛] 1.直接判定质数 bool judgePrime( int num ...
- [数论]线性筛——约数个数与约数和
参考博客 参考博客 参考博客 这个讲的挺好 预备知识点: 大于1的数n可以分解质因数: n=p1a1×p2a2×p3a3*-*pka n的约数的个数是(a1+1) * (a2+1) * (a3+1)- ...
- 【线性筛】【质因数分解】【约数个数定理】hdu6069 Counting Divisors
d(x)表示x的约数个数,让你求(l,r<=10^12,r-l<=10^6,k<=10^7) #include<cstdio> using namespace std; ...
- bzoj2820 [bzoj2820]YY的GCD(线性素数筛+莫比乌斯反演)
求gcd(i,j)为质数的个数.即 ∑p∑i=1n∑j=1mgcd(i,j)==p \sum\limits_p\sum\limits_{i=1}^n\sum\limits_{j=1}^mgcd(i,j ...
- 素数的线性筛法java,埃氏筛 线性筛(欧拉筛) 算法解析
埃氏晒 埃拉托斯特尼筛法,简称埃氏晒,是一种用来求自然数n以内的全部素数. 他的基本原理是,如果我们要获得小于n的所有素数,那就把不大于根号n的所有素数的倍数剔除. 埃氏晒的原理很容易理解,一个合数, ...
- c语言 快速筛质数,快速筛素数(埃式筛+线性筛+Miller_Rabin算法)
在CF上做到一道核心是需要筛出1~n所有素数的题目,然后刚好又没学过,就学习了快速筛素数的办法,基础的n根号n的算法这里大家每个人都知道吧QAQ,就不讲了,好像还是C语言上机说过的题目. 首先给大家介 ...
- 面试官本拿求素数搞我,但被我优雅的“回击“了(素数筛)
原创公众号(希望能支持一下):bigsai 转载请联系bigsai 文章收录在github 求star 前言 现在的面试官,是无数开发者的梦魇,能够吊打面试官的属实不多,因为大部分面试官真的有那么那几 ...
- 素数筛 Prime sieve
文章目录 素数筛 Prime sieve 一.素数的判定 二.埃氏筛法 三.欧拉筛法 四.六倍原理 素数筛 Prime sieve 素数又称质数:一个大于 1 的自然数,除了 1 和它自身外,不能被其 ...
- [Hello World] 素数筛C语言实现及优化
素数筛C语言实现及优化 一.概念 素数:素数(质数)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数. 素数筛:用素数标记合数(素数的整数倍都是合数),剩下的就是素数. 二.原理 规则 ...
最新文章
- 代码覆盖测试工具Kcov简介及使用
- 伺服驱动器接线怎么画_百格拉伺服驱动器维修常见故障现象及处理方法
- 前端开发需要掌握的SEO的知识点
- 滴滴经验分享:SQLFlow如何让运营专家用上AI?
- stm32 vscode 编译_vs code+gcc stm32编译环境搭建
- 代码质量 重构 代码鸡汤
- 贪 心 学用markdown
- eclipse中git的配置、提交代码、从远程导入代码
- 2017级C语言大作业 - 气球塔防
- Iocomp ActiveX/VCL Ultra Pack Crack
- 通信原理包络是什么意思_为什么齿轮不能少于17个齿,少于17个齿,齿轮传动会如何?...
- Ken Thompson 的经典 C 程序
- scp 是我小看了你---基于密钥传输!
- 线代9讲_特征值与特征向量相似理论
- android+删除相片代码,android删除手机照片
- 机器学习算法:kNN和Weighted kNN
- ValueError: could not convert string to float:
- 第二次作业——结对项目之需求分析与原型设计
- 如何获取微信公众号一键关注链接
- XLS和XLSX相同么?