博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简单的函数——Min_25筛
阅读量:6542 次
发布时间:2019-06-24

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

就是实现一下 筛积性函数的操作

首先要得到

$G(M,j)=\sum_{t=j}^{cnt} \sum_{e=1}^{p_t^{e+1}<=M} [\phi(p_t^e)*G([M/(p_t^e)],t+1)+\phi(p_t^{(e+1)})]$

​ $+(F(M)-(F(p_{j-1})))$

先要预处理后面的部分,得到$F(M)$和$F(p_{j-1})$

$F(p_{j-1})$可以直接筛素数的时候前缀和计算一下

$F(M)$就要利用第一步的筛法了

发现,除了2之外的质数都是奇数,所以f(p^1)=p xor 1=p-1

对于2要特判

对于G,直接根据式子大力计算即可。

递归处理。由于值还是比较分散的,所以没有记忆化的必要。(而且状态很多,对空间极为不友好)

剪枝:pri[t]的平方大于n就不用继续算了。

代码:

#include
#define il inline#define reg register int#define int long long#define numb (ch^'0')using namespace std;typedef long long ll;il void rd(int &x){ char ch;bool fl=false; while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true); for(x=numb;isdigit(ch=getchar());x=x*10+numb); (fl==true)&&(x=-x);}namespace Miracle{const int N=5e5+2;const int M=5e5+2;const int mod=1e9+7;int pri[M],tot;int sum[M];//pre of primebool vis[N];int sqr;ll f[N],g[N],h[N];void sieve(int n){ for(reg i=2;i<=n;++i){ if(!vis[i]){ vis[i]=1; pri[++tot]=i; } for(reg j=1;j<=tot;++j){ if(i*pri[j]>n) break; vis[i*pri[j]]=1; if(i%pri[j]==0) break; } } for(reg i=1;i<=tot;++i){ sum[i]=(sum[i-1]+pri[i])%mod; g[i]=(g[i-1]+(pri[i]^1))%mod; }}int id1[N],id2[N];ll val[N];ll n;int S(int x,int j){ if(x<=1||x
=2) f[i]=(h[i]-f[i]+2+mod)%mod; else f[i]=0; } //cout<<" after prewrk "<

 

转载于:https://www.cnblogs.com/Miracevin/p/10263570.html

你可能感兴趣的文章
【磁耦隔离接口转换器】系列产品选型指南
查看>>
Apriori 关联算法学习
查看>>
二叉树、红黑树、伸展树、B树、B+树
查看>>
Junit核心——测试集(TestSuite)
查看>>
MVPArms官方首发一键生成组件化,体验纯傻瓜式组件化开发
查看>>
Log4j_学习_00_资源帖
查看>>
制作iso镜像U盘自动化安装linux系统
查看>>
JSLint的使用
查看>>
命令行常用命令--软连接
查看>>
HTTP POST GET 本质区别详解
查看>>
OC继承专题
查看>>
PHP中HASH函数的优化技巧
查看>>
MD5加密
查看>>
RSA算法实例
查看>>
ant
查看>>
微信,想要说爱你,却没有那么容易!
查看>>
有关sqlite与sql
查看>>
MapXtreme 2005 学习心得 概述(一)
查看>>
php进一法取整、四舍五入取整、忽略小数等的取整数方法大全
查看>>
Hibernate的拦截器和监听器
查看>>