博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
各种筛法与莫比乌斯反演
阅读量:5122 次
发布时间:2019-06-13

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

先挖个坑,以后来填。

大佬的讲解连接【】

目前有的筛法有:

  • 诶氏筛
  • 扩展诶氏筛
  • 欧拉筛(筛一类积性函数)
  • 杜教筛
  • 洲阁筛
  • Min_25筛【】

上几份模板代码

  • 线性筛素数
P3383#include
#include
#include
using namespace std;const int M=1e7+10;int p[M];bool vis[M];int n,cnt,m;void sift(int a){
vis[0]=vis[1]=1; for(int i=2;i<=a;i++){
if(!vis[i]) p[++cnt]=i; for(int j=1;j<=cnt&&p[j]*i<=a;j++){
vis[p[j]*i]=1; if(i%p[j]==0) break; } }}int a;int main(){
scanf("%d%d",&n,&m); sift(n); for(int i=1;i<=m;i++){
scanf("%d",&a); if(vis[a]) printf("No\n"); else printf("Yes\n"); } return 0;}
  • 线性筛欧拉函数和莫比乌斯函数
#include
#include
#include
using namespace std;const int M=1e5+10;int mob[M],prime[M],cnt;bool notp[M];void Mobius(int n){
mob[1]=1; for(int i=2;i<=n;i++){
if(!notp[i]) prime[++cnt]=i,mob[i]=-1; for(int j=1;j<=cnt&&i*prime[j]<=n;j++){
notp[i*prime[j]]=1; if(i%prime[j]){
mob[i*prime[j]]=-mob[i]; }else{
mob[i*prime[j]]=0; break; } } }}int phi[M];void euler(int n){
phi[1]=1; for(int i=2;i<=n;i++){
if(notp[i]) prime[++cnt]=i,phi[i]=i-1; for(int j=1;j<=cnt&&i*prime[j]<=n;j++){
notp[i*prime[j]]=1; if(i%prime[j]){
phi[i*prime[j]]=phi[i]*(prime[j]-1); }else{
phi[i*prime[j]]=phi[i]*prime[j]; break; } } }}可以合在一起写
  • 线性筛约数个数与约数个数和
#include
#include
#include
using namespace std;const int M=1e5+10;int prime[M],cnt,gdiv[M],sdiv[M];bool nop[M];int num[M],sp[M];void init(int n){
gdiv[1]=sdiv[1]=1; for(int i=2;i<=n;i++){
if(!nop[i]) prime[++cnt]=i,gdiv[i]=2,num[i]=1,sdiv[i]=sp[i]=1+i; for(int j=1;j<=cnt&&i*prime[j]<=n;j++){
nop[i*prime[j]]=1; if(i%prime[j]){
gdiv[i*prime[j]]=gdiv[i]*gdiv[prime[j]];num[i*prime[j]]=1; sdiv[i*prime[j]]=sdiv[i]*sdiv[prime[j]]; sp[i*prime[j]]=1+prime[j]; }else{
gdiv[i*prime[j]]=gdiv[i]/(num[i]+1)*(num[i]+2);num[i*prime[j]]=num[i]+1; sdiv[i*prime[j]]=sdiv[i]/sp[i]*(sp[i]*prime[j]+1); sp[i*prime[j]]=sp[i]*prime[j]+1; break; } } }}int main(){
init(20); for(int i=1;i<=20;i++){
printf("%d : %d %d\n",i,gdiv[i],sdiv[i]); }}https://blog.csdn.net/ControlBear/article/details/77527115

转载于:https://www.cnblogs.com/VictoryCzt/p/10053424.html

你可能感兴趣的文章
我对前端MVC的理解
查看>>
Silverlight实用窍门系列:19.Silverlight调用webservice上传多个文件【附带源码实例】...
查看>>
2016.3.31考试心得
查看>>
mmap和MappedByteBuffer
查看>>
STM32单片机使用注意事项
查看>>
swing入门教程
查看>>
好莱坞十大导演排名及其代表作,你看过多少?
查看>>
Loj #139
查看>>
hihocoder1187 Divisors
查看>>
Azure 托管镜像和非托管镜像对比
查看>>
js window.open 参数设置
查看>>
032. asp.netWeb用户控件之一初识用户控件并为其自定义属性
查看>>
Ubuntu下安装MySQL及简单操作
查看>>
前端监控
查看>>
clipboard.js使用方法
查看>>
移动开发平台-应用之星app制作教程
查看>>
leetcode 459. 重复的子字符串(Repeated Substring Pattern)
查看>>
伪类与超链接
查看>>
centos 7 redis-4.0.11 主从
查看>>
永远的动漫,梦想在,就有远方
查看>>