题目链接

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. Nginx详解二十一:Nginx深度学习篇之配置苹果要求的openssl后台HTTPS服务

    配置苹果要求的证书: 1.服务器所有的连接使用TLS1.2以上的版本(openssl 1.0.2) 2.HTTPS证书必须使用SHA256以上哈希算法签名 3.HTTPS证书必须使用RSA2048位或 ...

  2. SNMP MIBs and IPv6

    https://www.cisco.com/c/en/us/about/security-center/snmp-mib-ipv6.html

  3. C#学习-面向对象语言都有类

    面向对象语言的一个基本特征是它们都有类,类是C#(这类语言)中的一种复杂数据类型. 类代表一组具有公共属性和行为的对象. 在C#中定义一个类是非常简单的,只需使用class关键字并按格式来定义即可. ...

  4. 部署Tomcat及nginx负载均衡

    Web应用服务器的选择   (1)IBM的WebSphere及Oracle的WebLogic 性能高,但价格也高   (2)Tomcat 性价比高 Tomcat服务器是一个免费的开放源代码的Web应用 ...

  5. BZOJ1208 [HNOI2004]宠物收养所 splay

    原文链接http://www.cnblogs.com/zhouzhendong/p/8085803.html 题目传送门 - BZOJ1208 题意概括 有两种数,依次加入. 规则为下: 如果当前剩余 ...

  6. .net core webapi 后台获取客户端ip地址

    Asp.Net Core2.0获取客户IP地址,及解决发布到Ubuntu服务器获取不到正确IP解决办法   1.获取客户端IP地址实现方法(扩展类) 1 using Microsoft.AspNetC ...

  7. day32 process模块用法

    昨日作业: 服务端: 服务端: from socket import * from multiprocessing import Process def server(ip,port): server ...

  8. TensorFlow池化层-函数

    池化层的作用如下-引用<TensorFlow实践>: 池化层的作用是减少过拟合,并通过减小输入的尺寸来提高性能.他们可以用来对输入进行降采样,但会为后续层保留重要的信息.只使用tf.nn. ...

  9. group by 和where 条件后面不能用刚设置的别名。

    select count(*),c_xy_bj a from z_user group by c_xy_bj     这个group by后面不能使用c_xy_bj 字段的别名a,只有外面再嵌套sel ...

  10. GIT结合android studio使用总结

    使用GIT前请阅读(有git基础可略过) git指引 :http://www.bootcss.com/p/git-guide/ 一. 下载git  http://git-scm.com/downloa ...