简单的函数——Min_25筛
就是实现一下Min-25筛 筛积性函数的操作
首先要得到
$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<bits/stdc++.h>
#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*+numb);
(fl==true)&&(x=-x);
}
namespace Miracle{
const int N=5e5+;
const int M=5e5+;
const int mod=1e9+;
int pri[M],tot;
int sum[M];//pre of prime
bool vis[N];
int sqr;
ll f[N],g[N],h[N];
void sieve(int n){
for(reg i=;i<=n;++i){
if(!vis[i]){
vis[i]=;
pri[++tot]=i;
}
for(reg j=;j<=tot;++j){
if(i*pri[j]>n) break;
vis[i*pri[j]]=;
if(i%pri[j]==) break;
}
}
for(reg i=;i<=tot;++i){
sum[i]=(sum[i-]+pri[i])%mod;
g[i]=(g[i-]+(pri[i]^))%mod;
}
}
int id1[N],id2[N]; ll val[N];
ll n;
int S(int x,int j){
if(x<=||x<pri[j]) return ;
cout<<" xx "<<x<<" jj "<<j<<endl;
int d=(x<=sqr)?id1[x]:id2[n/x];
int ret=(f[d]-g[j-]+mod)%mod;
for(reg t=j;t<=tot&&pri[t]*pri[t]<=x;++t){
int now=pri[t];
for(reg e=;now*pri[t]<=x;now=now*pri[t],++e){
ret=(ret+(pri[t]^e)*S(x/now,t+)%mod+(pri[t]^(e+))%mod)%mod;
}
}
return ret;
}
int main(){
scanf("%lld",&n);
if(n==){
puts("");return ;
}
sqr=sqrt(n);
// cout<<" sqr "<<sqr<<endl;
sieve(sqr);
// cout<<" after sieve "<<endl;
int m=;
for(ll i=,x;i<=n;i=x+){
x=n/(n/i);
val[++m]=n/i;
if(val[m]<=sqr) id1[val[m]]=m;
else id2[n/val[m]]=m;
}
for(reg i=;i<=m;++i){
f[i]=val[i]-;h[i]=(((ll)val[i]%mod*(val[i]%mod+))/-+mod)%mod;
}
for(reg j=;j<=tot;++j){
for(reg i=;i<=m&&(ll)pri[j]*pri[j]<=val[i];++i){
int to=(val[i]/pri[j])<=sqr?id1[val[i]/pri[j]]:id2[n/(val[i]/pri[j])];
f[i]=(f[i]-(f[to]-(j-))+mod+mod)%mod;
h[i]=(h[i]-pri[j]*(h[to]-sum[j-]+mod)%mod+mod)%mod;
}
}
for(reg i=;i<=m;++i){
if(val[i]>=) f[i]=(h[i]-f[i]++mod)%mod;
else f[i]=;
}
//cout<<" after prewrk "<<endl;
printf("%lld",(S(n,)+)%mod);
return ;
} }
signed main(){
Miracle::main();
return ;
} /*
Author: *Miracle*
Date: 2019/1/13 17:03:03
*/
简单的函数——Min_25筛的更多相关文章
- LOJ.6053.简单的函数(Min_25筛)
题目链接 Min_25筛见这里: https://www.cnblogs.com/cjyyb/p/9185093.html https://www.cnblogs.com/zhoushuyu/p/91 ...
- LOJ 6053 简单的函数——min_25筛
题目:https://loj.ac/problem/6053 min_25筛:https://www.cnblogs.com/cjyyb/p/9185093.html 这里把计算 s( n , j ) ...
- loj 6053 简单的函数 —— min_25筛
题目:https://loj.ac/problem/6053 参考博客:http://www.cnblogs.com/zhoushuyu/p/9187319.html 算 id 也可以不存下来,因为 ...
- LOJ6053 简单的函数 【Min_25筛】【埃拉托斯特尼筛】
先定义几个符号: []:若方括号内为一个值,则向下取整,否则为布尔判断 集合P:素数集合. 题目分析: 题目是一个积性函数.做法之一是洲阁筛,也可以采用Min_25筛. 对于一个可以进行Min_25筛 ...
- LOJ6053 简单的函数(min_25筛)
题目链接:LOJ 题目大意:从前有个积性函数 $f$ 满足 $f(1)=1,f(p^k)=p\oplus k$.(异或)求其前 $n$ 项的和对 $10^9+7$ 取模的值. $1\le n\le 1 ...
- [LOJ6053]简单的函数:Min_25筛
分析 因为题目中所给函数\(f(x)\)的前缀和无法较快得出,考虑打表以下两个函数: \[ g(x)=x \times [x是质数] \] \[ h(x)=1 \times [x是质数] \] 这两个 ...
- min_25筛
min_25筛 用来干啥? 考虑一个积性函数\(F(x)\),用来快速计算前缀和\[\sum_{i=1}^nF(i)\] 当然,这个积性函数要满足\(F(x),x\in Prime\)可以用多项式表示 ...
- Min_25 筛小结
Min_25 筛这个东西,完全理解花了我很长的时间,所以写点东西来记录一些自己的理解. 它能做什么 对于某个数论函数 \(f\),如果满足以下几个条件,那么它就可以用 Min_25 筛来快速求出这个函 ...
- [复习]莫比乌斯反演,杜教筛,min_25筛
[复习]莫比乌斯反演,杜教筛,min_25筛 莫比乌斯反演 做题的时候的常用形式: \[\begin{aligned}g(n)&=\sum_{n|d}f(d)\\f(n)&=\sum_ ...
随机推荐
- Firefox开发
官方文档 First extension 目录结构 ➜ firefox tree . └── borderify └── manifest.json // 必须 directory, files ma ...
- info信息的获取
一.绝对路径(_SERVER[“SCRIPT_FILENAME”])这个是最常用,也是最有效的一个办法,找到phpinfo()页面可以直接找到网站的绝对路径,对于写shell和信息搜集是必不可少的.二 ...
- 用Python实现多站点运维监控
在小型公司里如果产品线单一的话,比如就一个app, 一般1~2个运维就够用了.如果产品过于庞大,就需要多个运维人员. 但对于多产品线的公司来说,运维人员就要必须分多个人负责,因为超过200个站点让1个 ...
- [network]数字签名
数字签名(又称公钥数字签名.电子签章)是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法.一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证. ...
- 如何计算FOB价格
FOB价格是国际贸易术语常有的一种算法,针对不同的对象,FOB价格也有不一样的算法.对于做外贸生意的朋友,需要了解FOB价格以及各项费用名称,以及如何计算FOB价格. FOB价格是国际FOB价格语常有 ...
- rhel6 mysql skip-grant-tables 添加用户报错 ERROR 1290
不小心把数据库密码忘掉了, 这个时候我们只需要在数据库的配置文件里面添加 skip-grant-tables 然后重新启动服务,再登录数据库就不要我们输入密码了 这个时候我成功登录数据,可是不小心又把 ...
- 详解Python中的下划线
本文将讨论Python中下划线(_)字符的使用方法.我们将会看到,正如Python中的很多事情,下划线的不同用法大多数(并非所有)只是常用惯例而已. 单下划线(_) 通常情况下,会在以下3种场景中使用 ...
- Github三次学习
作者声明:本文参照aicoder.com马伦老师的文档,根据自己的学习情况而做的笔记,仅供交流学习. Git入门到高级教程 为什么要进行项目文件的版本管理 代码备份和恢复 团队开发和协作流程 项目分支 ...
- CSS3实现图片渐入效果
很多网站都有那种图片渐入的效果,如:http://www.mi.com/minote/,这种效果用css3和一些js实现起来特别简单. 拿我之前做的页面来说一下怎么利用css3来实现图片渐入效果. 下 ...
- 20181120-6 Beta阶段第2周/共2周 Scrum立会报告+燃尽图 03
此作业要求参见:[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2411] 版本控制地址 [https://git.coding.n ...