线性筛法相关
来源:互联网 发布:oa协同办公平台源码 编辑:程序博客网 时间:2024/04/28 00:12
基本证明可以看这里,懒得多写。
一个藓的证明
最关键部分
其实还可以筛其他东西
他们的本质都是要求的
下面所有的分析与证明都要与线性筛法代码结合,不然读不懂.
筛出约数个数
首先吧,肯定要维护这个玩意
然后再维护一个
*
还有一个质数表
那我们来分类讨论一下。
设
当i mod pj!=0 时,
就说明k相对于i多了一个质因子
其中
当i|pj 时,
就说明k相对于i又多了一个质因子
于是我们就完成了这个艰巨的任务: 筛出每个数有多少约数。
void get_prime() { int i,j,k; memset(flag,false,sizeof(flag)); k=0; for(i=2;i<M;i++){ if(!flag[i]){ prime[k++]=i; e[i]=1; Ans[i]=2; //素数的约数个数为2 } for(j=0;j<k&&i*prime[j]<M;j++){ flag[i*prime[j]]=true; if(i%prime[j]==0){ Ans[i*prime[j]]=Ans[i]/(e[i]+1)*(e[i]+2); e[i*prime[j]]=e[i]+1; break; } else{ Ans[i*prime[j]]=Ans[i]*Ans[prime[j]]; e[i]=1; } } } }
筛出欧拉函数φ
读作
φ(n)为小于等于n并与n互质的数的个数,他是积性函数 φ(a*b)=φ(a)*φ(b),gcd(a,b)=1
一个性质:
显然当
因为显然只有有x这个因子的数(x的倍数)才不互质
现在我们来考虑一个数
由积性函数得,
那我们之前得的那一个性质就有用了.
设x为i的第1个质因子(任意一个也可,这里方便表述),则
由
即
结论
x是素数,
否则
int prime[M/3],phi[M]; bool flag[M]; void get_prime() { int i,j,k; memset(flag,false,sizeof(flag)); k=0; for(i=2;i<M;i++){ if(!flag[i]){ prime[k++]=i; phi[i]=i-1; } for(j=0;j<k&&i*prime[j]<M;j++){ flag[i*prime[j]]=true; if(i%prime[j]==0){ phi[i*prime[j]]=phi[i]*prime[j]; break; } else phi[i*prime[j]]=phi[i]*(prime[j]-1); } } }
- 线性筛法相关
- 素数筛法相关问题
- 分治法相关
- 趋势分析法相关资料
- 虚拟激励法相关记录
- 随机梯度下降法相关
- 冒泡排序法相关解析
- 牛顿法和拟牛顿法相关
- 匈牙利命名法相关命名表
- 第七章 暴力求解法相关知识点总结
- 通信算法之十七:互相关、自相关、线性卷积,在通信系统物理层中的应用
- 线性筛
- 线性筛
- 线性筛
- 线性筛
- 线性筛
- 线性筛
- 线性筛
- nginx使用ssl模块配置HTTPS支持
- node.js调试
- Android开发笔记——TextView的高级应用之文本的淡入淡出
- Python datetime模块使用
- Can't locate Switch.pm in @INC
- 线性筛法相关
- Solr --- SolrCloud
- 线程同步中的“生产者和消费者”模式
- @strongify以及@weakify宏命令的的使用(1)
- 关于智能DNS和CDN加速介绍
- SICP 习题1.12 帕斯卡三角形
- 基于Spring的包含特定注解bean的package扫描工具
- 第一个Java程序
- Service IntentService区别 (面试)