题目链接

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筛)的更多相关文章

  1. LOJ 6053 简单的函数——min_25筛

    题目:https://loj.ac/problem/6053 min_25筛:https://www.cnblogs.com/cjyyb/p/9185093.html 这里把计算 s( n , j ) ...

  2. loj 6053 简单的函数 —— min_25筛

    题目:https://loj.ac/problem/6053 参考博客:http://www.cnblogs.com/zhoushuyu/p/9187319.html 算 id 也可以不存下来,因为 ...

  3. loj#6053. 简单的函数(Min_25筛)

    传送门 题解 \(Min\_25\)筛有毒啊--肝了一个下午才看懂是个什么东西-- \(zsy\)巨巨强无敌-- //minamoto #include<bits/stdc++.h> #d ...

  4. 简单的函数——Min_25筛

    %%yyb %%zsy 就是实现一下Min-25筛 筛积性函数的操作 首先要得到 $G(M,j)=\sum_{t=j}^{cnt} \sum_{e=1}^{p_t^{e+1}<=M} [\phi ...

  5. LOJ #6053. 简单的函数

    $Min$_$25$筛模版题 为什么泥萌常数都那么小啊$ QAQ$ 传送门:Here 题意: $ f(1)=1$$ f(p^c)=p⊕c(p 为质数,⊕ 表示异或)$$ f(ab)=f(a)f(b)( ...

  6. LOJ.6235.区间素数个数(Min_25筛)

    题目链接 \(Description\) 给定\(n\),求\(1\sim n\)中的素数个数. \(2\leq n\leq10^{11}\). \(Solution\) Min_25筛.只需要求出\ ...

  7. LOJ #6202. 叶氏筛法(min_25 筛)

    题意 求 \([L, R]\) 之间的素数之和 . \(L≤10^{10},2×10^{10} \le R \le 10^{11}\) 题解 一个有点裸的 min_25筛 ? 现在我只会筛素数的前缀和 ...

  8. min_25筛

    min_25筛 用来干啥? 考虑一个积性函数\(F(x)\),用来快速计算前缀和\[\sum_{i=1}^nF(i)\] 当然,这个积性函数要满足\(F(x),x\in Prime\)可以用多项式表示 ...

  9. 「算法笔记」Min_25 筛

    戳 这里(加了密码).虽然写的可能还算清楚,但还是不公开了吧 QwQ. 真的想看的 私信可能会考虑给密码 qwq.就放个板子: //LOJ 6053 简单的函数 f(p^c)=p xor c #inc ...

随机推荐

  1. python(9): GUI

    实例1: 对输入的所有数字求和, 最后以. 结束输入 def fun(): list1=[] print('input a number:') while True: num=input() if n ...

  2. django----Form详细信息

    Form类: 创建Form类时,主要涉及到 [字段] 和 [插件],字段用于对用户请求数据的验证,插件用于自动生成HTML; Django内置字段 Field required=True, 是否允许为 ...

  3. Python匿名函数(lambda)

    result = lambda [arg1 [, arg2, .....]]:expression result:用于调用lambda表达式 [arg1 [, arg2, -]]:可选参数,用于传递参 ...

  4. delete web server(nginx)

    #!/bin/bash conf_dir1="/usr/local/nginx/conf/vhost.d" #conf_dir2="/usr/local/apache2/ ...

  5. AI-URL注册器

    官方文档地址:https://www.django-rest-framework.org/tutorial/quickstart/#serializers #url生成器生成四个url,就可以访问关于 ...

  6. 手机app数据的爬取之mitmproxy安装教程

    mitmproxy是一个支持HTTP和HTTPS的抓包程序,类似Fiddler.Charles的功能,只不过它通过控制台的形式操作. 此外,mitmproxy还有两个关联组件,一个是mitmdump, ...

  7. Caused by: java.net.ConnectException: Connection refused: master/192.168.3.129:7077

    1:启动Spark Shell,spark-shell是Spark自带的交互式Shell程序,方便用户进行交互式编程,用户可以在该命令行下用scala编写spark程序. 启动Spark Shell, ...

  8. 各厂商服务器存储默认管理口登录信息(默认IP、用户名、密码)收集

    666:https://blog.csdn.net/xiezuoyong/article/details/84997917

  9. ASP.NET Core IHostEnvironment和IApplicationLifetime介绍

    IHostEnvironment获取程序信息 public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app ...

  10. 【BZOJ1095】【ZJOI2007】捉迷藏 [动态点分治]

    题解: 好像还是比较简单的 对每个重心向下一层重心连边 树高是log的 我们对每一层维护两个信息 1.所有节点到上一层重心的距离 2.所有儿子的1堆的堆顶 另外开个总的堆 维护每一层最长+次长 修改是 ...