线性筛板子
来源:互联网 发布:韩国网络女主播李秀彬 编辑:程序博客网 时间:2024/06/03 00:35
求素数
#include<cstdio>#include<cstring>using namespace std;const int N=10000000;bool noprime[N+5];int prime[N+5],size;void euler(int n){ for(int i=2;i<=n;i++){ if(!noprime[i]) prime[++size]=i; for(int j=1;j<=size&&i*prime[j]<=n;j++){ noprime[i*prime[j]]=1; if(i%prime[j]==0) break; } } noprime[1]=1;//这里要记得特判 }int main(){ int n,m; scanf("%d %d",&n,&m); euler(n); while(m--){ int x; scanf("%d",&x); if(noprime[x]) printf("No\n"); else printf("Yes\n"); } return 0;}
欧拉函数——phi[ ]
莫比乌斯函数——mob[ ]
正约数个数——facnum[ ]
质因数个数——d[ ]
int prime[N],phi[N],mob[N],/**/facnum[N],d[N];bool noprime[N];/*莫比乌斯函数mob[i]若i为奇数个不同素数之积mob[i] = -1若i为偶数个不同素数之积mob[i] = 1若i有平方因子则mob[i] = 0。虽然在这里不用莫比乌斯函数 */void euler(){ int size=0; phi[1]=1;mob[1]=1;facnum[1]=1; for(int i=2;i<=N-5;i++){ if(!noprime[i]){ prime[++size]=i; phi[i]=i-1; mob[i]=-1; facnum[i]=2; d[i]=1; } for(int j=1;j<=size&&i*prime[j]<=N-5;j++){ noprime[i*prime[j]]=1; if(i%prime[j]==0){ phi[i*prime[j]]=prime[j]*phi[i];//!! facnum[i*prime[j]]=facnum[i]/(1+d[i])*(2+d[i]); d[i*prime[j]]=d[i]+1; mob[i*prime[j]]=0; break; } phi[i*prime[j]]=phi[i]*(prime[j]-1); facnum[i*prime[j]]=facnum[i]*2; d[i*prime[j]]=1; mob[i*prime[j]]=mob[i]*(-1); } }}
阅读全文
0 0
- 线性筛板子
- 欧拉筛板子
- 线性子空间
- 线性相关与线性子空间
- 最大子序列和线性算法
- 最大子序列的线性算法
- 寻找最大子串(线性方法)
- 线性时间解决最大子数组问题
- 最大子序列问题,递归和线性
- 求最大子序列的线性算法
- 线性时间内求最大子数组和
- Problem B: 子序列问题(线性表)
- 最大连续子序列(线性DP)
- 线性求子序列最大平均值
- 线性子空间和仿射子空间
- nyoj44 子串和 线性DP
- 线性时间的最大子数组
- 最大子数组--线性非递归实现
- 有序顺序表的插入
- 11.1第十周java作业
- 字典、列表、元祖、字符串的综合(2)
- 林轩田--机器学习技法--SVM笔记3--核支持向量机(Kenel+Support+Vector)
- 《WinDbg 命令三部曲:(三)WinDbg SOSEX 扩展命令手册》
- 线性筛板子
- Java静态对象和非静态对象有什么区别??
- 空语句的测试
- 关于火狐浏览器自动填充支付密码问题解决办法
- Java-BigDecimal类,BigInteger类
- LeetCode 721( Accounts Merge)
- JZOJ 5458. 【NOIP2017提高A组冲刺11.7】质数
- 汇编-寄存器
- 基于opencv的单张图像去雾算法(三)