LOJ.6053.简单的函数(Min_25筛)
题目链接
Min_25筛见这里:
https://www.cnblogs.com/cjyyb/p/9185093.html
https://www.cnblogs.com/zhoushuyu/p/9187319.html
https://www.cnblogs.com/SovietPower/p/10101811.html
\(Description\)
给定\(n\),求积性函数\(f(p^c)=p\oplus c\)的前缀和。\(\oplus\)表示异或运算。
\(n\leq 10^{10}\)。
\(Solution\)
所求积性函数为\(f(p^c)=p\oplus c,\quad p\in Prime\)。
先考虑质数的贡献。因为除\(2\)以外的质数\(p\)都是奇数,所以\(f(p)=p-1\),\(f(2)\)就是\(2+1=3\)了。
不妨先把\(f(2)\)也看做\(f(2)=p-1\)。
这样\(f(p)=p-1\),但还不是积性函数,但是我们可以拆成两个积性函数的和:\(f(p)=g(p)-h(p)\),其中\(g(p)=p,\ h(p)=[p是质数]\)。分别计算这两个函数的前缀和。
然后,首先计算初值\(g(n,0)\),把所有合数看做质数,那么\(g(n),h(n)\)的前缀和也就是初值分别是\(\frac{n(n+1)}{2}-1\),\(n-1\)(不考虑\(f(1)\))。
然后计算\(g(x,|P|)\)。在外层枚举\(j\)把第二维滚动掉。
另外每次从\(\frac{n}{P_j}\)转移,都是整除,结果只有\(O(sqrt(n))\)种(好像是\(2sqrt(n)\)?不知道为什么...),所以可以先离散化。
然后套式子得到\(g(x,|P|)\)。
然后套式子计算\(S(n,1)\)。当\(j=1\)时给结果加个\(2\),因为\(f(P_1)=f(2)\)是按\(2-1=1\)计算的,应该是\(3\)。
这里直接递归算就行了,而且不需要记忆化。
//1214ms 4.12M
#include <cmath>
#include <cstdio>
#include <algorithm>
#define mod 1000000007
#define Mod(x) x>=mod&&(x-=mod)
typedef long long LL;
const int N=2e5+5;
int Sqr,cnt,P[N>>2],sp[N],id1[N],id2[N],g[N],h[N];
LL n,w[N];
bool notP[N];
void Init(int n)
{
notP[1]=1;
for(int i=2; i<=n; ++i)
{
if(!notP[i]) P[++cnt]=i, sp[cnt]=sp[cnt-1]+i, Mod(sp[cnt]);
for(int j=1; j<=cnt && i*P[j]<=n; ++j)
{
notP[i*P[j]]=1;
if(!(i%P[j])) break;
}
}
}
int S(LL x,int y)
{
if(x<=1||(y!=cnt+1&&P[y]>x)) return 0;//注意y=cnt+1时也需要计算!
int k=x<=Sqr?id1[x]:id2[n/x];
LL res=g[k]-sp[y-1]-h[k]+y-1;//g-h
if(y==1) res+=2;//f(2)还是就放到里面算吧 否则要判下n<2。
for(int i=y; /*i<=cnt&&*/1ll*P[i]*P[i]<=x; ++i)
{
LL p=P[i],p1=p,p2=p*p;
for(int e=1; p2<=x; ++e,p1=p2,p2*=p)
res+=1ll*(p^e)*S(x/p1,i+1)%mod+(p^(e+1));
res%=mod;
}
return res%mod;
}
main()
{
scanf("%lld",&n); Init(Sqr=sqrt(n+0.5));
int m=0;
for(LL i=1,j; i<=n; i=j+1)
{
w[++m]=n/i, j=n/w[m];
if(w[m]<=Sqr) id1[w[m]]=m;
else id2[j]=m;
g[m]=w[m]&1?w[m]%mod*((w[m]+1>>1)%mod)%mod-1:(w[m]>>1)%mod*(w[m]%mod+1)%mod-1;//w乘之前要取模!
h[m]=(w[m]-1)%mod;
}
P[cnt+1]=1e9, w[m+1]=-1;
for(int j=1; j<=cnt; ++j)
{
int pj=P[j]; LL lim=1ll*pj*pj;
for(int i=1; lim<=w[i]; ++i)
{
int k=w[i]/pj<=Sqr?id1[w[i]/pj]:id2[n/(w[i]/pj)];//n/(w/pj)! id1[x]=x,但id2[x]的编号是对[n/x]的。
(g[i]-=1ll*pj*(g[k]-sp[j-1])%mod)%=mod;//g[k]-sp[j-1]有可能是负的,如果+mod会爆int!
h[i]+=mod-h[k]+j-1, Mod(h[i]);
}
}
printf("%d\n",((S(n,1)+1)%mod+mod)%mod);
return 0;
}
LOJ.6053.简单的函数(Min_25筛)的更多相关文章
- 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 也可以不存下来,因为 ...
- loj#6053. 简单的函数(Min_25筛)
传送门 题解 \(Min\_25\)筛有毒啊--肝了一个下午才看懂是个什么东西-- \(zsy\)巨巨强无敌-- //minamoto #include<bits/stdc++.h> #d ...
- 简单的函数——Min_25筛
%%yyb %%zsy 就是实现一下Min-25筛 筛积性函数的操作 首先要得到 $G(M,j)=\sum_{t=j}^{cnt} \sum_{e=1}^{p_t^{e+1}<=M} [\phi ...
- LOJ #6053. 简单的函数
$Min$_$25$筛模版题 为什么泥萌常数都那么小啊$ QAQ$ 传送门:Here 题意: $ f(1)=1$$ f(p^c)=p⊕c(p 为质数,⊕ 表示异或)$$ f(ab)=f(a)f(b)( ...
- LOJ.6235.区间素数个数(Min_25筛)
题目链接 \(Description\) 给定\(n\),求\(1\sim n\)中的素数个数. \(2\leq n\leq10^{11}\). \(Solution\) Min_25筛.只需要求出\ ...
- LOJ #6202. 叶氏筛法(min_25 筛)
题意 求 \([L, R]\) 之间的素数之和 . \(L≤10^{10},2×10^{10} \le R \le 10^{11}\) 题解 一个有点裸的 min_25筛 ? 现在我只会筛素数的前缀和 ...
- min_25筛
min_25筛 用来干啥? 考虑一个积性函数\(F(x)\),用来快速计算前缀和\[\sum_{i=1}^nF(i)\] 当然,这个积性函数要满足\(F(x),x\in Prime\)可以用多项式表示 ...
- 「算法笔记」Min_25 筛
戳 这里(加了密码).虽然写的可能还算清楚,但还是不公开了吧 QwQ. 真的想看的 私信可能会考虑给密码 qwq.就放个板子: //LOJ 6053 简单的函数 f(p^c)=p xor c #inc ...
随机推荐
- java----微服务架构
参考文档 https://topsale.gitbooks.io/java-cloud-dubbo/content/ 单体应用: 项目的架构完完全全属于传统的 MVC 架构,所有的子系统都集成在一个很 ...
- cf1110E 思维
/* Ci'=Ci+1 + Ci-1 -Ci Ci+1 - Ci' = Ci - Ci-1 Ci' - Ci-1 = Ci+1 - Ci; 即求一次Ci’等价于交换Ci和Ci-1 与 Ci+1和Ci的 ...
- shell 排除目录
1.新建文件 exclude.txt,在文件中写需要排除的目录(只需要目录名称,不需要路径) 2.--exclude-from='/data/www/vhosts/git_track/git-shel ...
- AI学习吧
一:AI学习吧 项目描述 系统使用前后端分离的模式,前端使用vue框架,后端使用restframework实现. 项目需求 公司开发AI学习吧,由于公司需要一款线上学习平台,要开发具有线上视频学习.支 ...
- 饮冰三年-人工智能-linux-04 vim编辑器
vim的三种模式:命令行模式.编辑模式.扩展模式 1:命令行模式下常见的操作 删除 a):dd 删除光标所在当前行 b):ndd 删除光标所在当前行后的n行 复制 c):yy 复制光标所在当前行 ...
- python之字符编码
1.以什么编码存的就以什么编码取出; 内存固定使用unicode编码; 我们可以控制的编码是往硬盘存放或者基于网络传输选择编码. 2.数据是最先产生于内存中,是unicode格式,要想传输需要转成by ...
- 微信小程序如何自动弹出提示微信授权?
我想在一进入页面的时候就进行判断提示并且弹出提示授权!请问该如何处理比较合理 wx.authorize({}) //可以通过 wx.getSetting 先查询一下用户是否授权了 "scop ...
- fcagte.exe应用程序错误
原文:What is Fcagte.exe and How To Fix It? Overview of Fcagte.exe What Is Fcagte.exe? Fcagte.exe is a ...
- GoLang函数参数的传递练习
春节买的GO方面的书,看了一次.现在撸一些代码,作为练习. // Copyright © 2019 NAME HERE <EMAIL ADDRESS> // // Licensed und ...
- jQuery实用工具集
插件描述:jQuery实用工具集,该插件封装了常用功能,如序列化表单值获取地址栏参数window对象操作等 此工具集包含判断浏览器,判断浏览终端,获取地址栏参数,获取随机数,数据校验等常用操作功能 引 ...