题面

传送门

题解

好毒啊……\(de\)了一个晚上的\(bug\)……

题目所求为

\[\prod_{i=1}^n\sigma_0(i)^{\mu(i)+i}(mod\ 10^{12}+39)\]

那么我们把式子拆开来,变成

\[(\prod_{i=1}^n\sigma_0(i)^{\mu(i)})(\prod_{i=1}^n\sigma_0(i)^i)\]

左边

现在就是要求\(\prod_{i=1}^n\sigma_0(i)^{\mu(i)}\)

我们发现只有在所有质因子都不超过\(1\)个的时候才会有\(\mu(i)\neq 0\)

那么上式就可以转化一下

\[\prod_{i=1}^n\sigma_0(i)^{\mu(i)}=\prod_{i=1}^n 2^{c(i)\mu(i)}=2^{\sum_{i=1}^nc(i)\mu(i)}\]

其中\(c(i)\)表示\(i\)的因子个数

于是现在我们要对\(\sum_{i=1}^nc(i)\mu(i)\),求和,考虑\(Min\_25\)筛

假设我们现在已经求出\(g(n,|P|)=\sum_{i=1}^n c(i)\mu(i)[i\in prime]\)

\[S(n,j)=\sum_{i=1}^n c(i)\mu(i)[i\in prime\ or\ min_p(i)\geq P_j]\]

那么我们就可以递推了

\[S(n,j)=S(n,j+1)+(-1) \left(S \left(\left\lfloor\frac{n}{P_j}\right\rfloor,j+1\right)-\sum_{i=1}^{j-1}\mu(i)\right)\]

等等,按上面这样真的大丈夫?我们是对于\(S(n,j)\)考虑是否有\(P_j\)这个质因子,如果没有就是加上\(S(n,j+1)\),如果有的话就是加上后面那个……

似乎不对诶,我让\(P_j\)乘上去之后,每一个数的因子个数\(+1\),那么我们维护的\(\sum c(i)\mu(i)\)里面\(c(i)\)也要变啊,这不就出问题了么?因为这里\(c(i)\)加了\(1\),那么为了让减去的这个值是真的,我们似乎还需要减去\(\sum \mu(i)\)

为了避免这个问题,我们还需要定义一个

\[\sum_{i=1}^n \mu(i)[i\in prime\ or\ min_p(i)\geq P_j]\]

那么这下子就能真·递推了

\[g(n,j)=g(n,j+1)+(-1) \left(g \left(\left\lfloor\frac{n}{P_j}\right\rfloor,j+1\right)-\sum_{i=1}^{j-1}\mu(i)\right)\]

\[S(n,j)=S(n,j+1)+(-1) \left(S \left(\left\lfloor\frac{n}{P_j}\right\rfloor,j+1\right)-\sum_{i=1}^{j-1}\mu(i)\right)+(-1) \left(g \left(\left\lfloor\frac{n}{P_j}\right\rfloor,j+1\right)-\sum_{i=1}^{j-1}\mu(i)\right)\]

用\(Min\_25\)筛带进去递推就行了

右边

要求

\[\prod_{i=1}^n\sigma_0(i)^i\]

那么我们考虑枚举质因子,大概是这么个式子

\[\prod_{p}\prod_{k}(k+1)^{g(p,k)}\]

就是枚举质数\(p\),枚举这个质数的次数\(k\),\(g(p,k)\)表示\(1\)到\(n\)中有这么多个数满足它们的中\(p\)的次数为\(k\),然后这些数求和

不难发现

\[g(p,k)=p^ks(\lfloor\frac{n}{p^k}\rfloor)-p^{k+1}s(\lfloor\frac{n}{p^{k+1}}\rfloor)\]

如果\(p<\sqrt{n}\),直接暴力搞就行了,复杂度是和\(Min\_25\)筛一样的

然而\(p>\sqrt{n}\)怎么办呢?

发现这个时候\(k=1\),那么就可以上整除分块了

然后没有然后了

最后最后:记得取模,记得取模,记得取模!

//minamoto
#include<bits/stdc++.h>
#define R register
#define ll long long
#define dd long double
#define ID(x) ((x)<=sqr?id1[x]:id2[n/(x)])
#define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i)
#define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
using namespace std;
const int N=1e6+5;const ll P=1e12+39,Phi=P-1;
inline ll add1(R ll x,R ll y){return x+y>=P?x+y-P:x+y;}
inline ll dec1(R ll x,R ll y){return x-y<0?x-y+P:x-y;}
inline ll mul1(R ll x,R ll y){ll r=(dd)x*y/P;return x*y-r*P;}
inline ll add2(R ll x,R ll y){return x+y>=Phi?x+y-Phi:x+y;}
inline ll dec2(R ll x,R ll y){return x-y<0?x-y+Phi:x-y;}
inline ll mul2(R ll x,R ll y){ll r=(dd)x*y/Phi;return x*y-r*Phi;}
ll ksm(R ll x,R ll y){y=(y%Phi+Phi)%Phi;ll res=1;for(;y;y>>=1,x=mul1(x,x))if(y&1)res=mul1(res,x);return res;
}
ll w[N],g[N],h[N],f[N],sp[N],sum[N];int id1[N],id2[N],p[N];
bitset<N>vis;ll n,ans,res;int m,tot,sqr,lim,id,k;
void init(){vis[1]=1;fp(i,2,N-1){if(!vis[i])p[++tot]=i,sp[tot]=sp[tot-1]+i;for(R int j=1;j<=tot&&1ll*i*p[j]<N;++j){vis[i*p[j]]=1;if(i%p[j]==0)break;}}lim=tot;
}
void solve(){m=0,sqr=sqrt(n),tot=upper_bound(p+1,p+1+lim,sqr)-p-1;for(R ll i=1,j;i<=n;i=j+1){j=n/(n/i),w[++m]=n/i;w[m]<=sqr?id1[w[m]]=m:id2[n/w[m]]=m;sum[m]=h[m]=(w[m]&1)?mul2((w[m]+1)>>1,w[m]):mul2(w[m]>>1,w[m]+1),h[m]=dec2(h[m],1);g[m]=w[m]-1;}fp(j,1,tot)for(R int i=1;1ll*p[j]*p[j]<=w[i];++i){id=ID(w[i]/p[j]);h[i]=dec2(h[i],mul2(p[j],dec2(h[id],sp[j-1])));g[i]=dec2(g[i],dec2(g[id],j-1));}fp(i,1,m)f[i]=g[i]=dec2(0,g[i]);fd(j,tot,1)for(R int i=1;1ll*p[j]*p[j]<=w[i];++i){id=ID(w[i]/p[j]);f[i]=dec2(f[i],add2(add2(g[id],j),add2(f[id],j)));g[i]=dec2(g[i],add2(g[id],j));}ans=ksm(2,f[1]);ll i,j;for(j=1;j<=tot&&1ll*p[j]*p[j]<=n;++j){ll x=p[j],y=1ll*p[j]*p[j];for(i=1;x<=n;++i,x=y,y*=p[j]){res=dec2(mul2(x,sum[ID(n/x)]),y<=n?mul2(y,sum[ID(n/y)]):0);ans=mul1(ans,ksm(i+1,res));}}i=p[j-1]+1,j=n/(n/i);for(;i<=j;++i)if(!vis[i])ans=mul1(ans,ksm(2,mul2(i,n/i)));for(;i<=n;i=j+1){j=n/(n/i);res=h[ID(j)],res=dec2(res,h[ID(i-1)]);res=mul2(res,sum[ID(n/i)]);ans=mul1(ans,ksm(2,res));}printf("%lld\n",ans);
}
int main(){
//  freopen("testdata.in","r",stdin);int T;scanf("%d",&T);init();while(T--)scanf("%lld",&n),solve();return 0;
}

转载于:https://www.cnblogs.com/bztMinamoto/p/10421123.html

[51nod1965]奇怪的式子(Min_25筛)相关推荐

  1. [51NOD1847]奇怪的数学题(杜教筛+min_25筛+第二类斯特林数)

    f(x)f(x)f(x)表示xxx的次大约数,有f(x)=xx的最小质因数f(x)=\frac{x}{x的最小质因数}f(x)=x的最小质因数x​,那么 ∑i=1n∑j=1nsgcd(i,j)k=∑i ...

  2. LOJ.6053.简单的函数(Min_25筛)

    题目链接 Min_25筛见这里: https://www.cnblogs.com/cjyyb/p/9185093.html https://www.cnblogs.com/zhoushuyu/p/91 ...

  3. Min_25筛学习Tip+链接

    前言 机房里差不多都会Min_25筛了,我也赶紧补一波坑v_v 参考: txc的Min_25筛学习笔记 yx的Min_25筛学习笔记 由于前面两位dalao的标题都是笔记,所以我这里就是小记了,因为这 ...

  4. Min_25 筛小结

    Min_25 筛这个东西,完全理解花了我很长的时间,所以写点东西来记录一些自己的理解. 它能做什么 对于某个数论函数 \(f\),如果满足以下几个条件,那么它就可以用 Min_25 筛来快速求出这个函 ...

  5. Min_25筛有关求解次小质因子

    #188. [UR #13]Sanrd 题意化简就是求次小质因子,这一步我们可以在Min_25筛的ans计算中得到, S(n, j)表示的是最小质因子大于等于primejprime_jprimej​的 ...

  6. [复习]莫比乌斯反演,杜教筛,min_25筛

    [复习]莫比乌斯反演,杜教筛,min_25筛 莫比乌斯反演 做题的时候的常用形式: \[\begin{aligned}g(n)&=\sum_{n|d}f(d)\\f(n)&=\sum_ ...

  7. 关于 min_25 筛的入门以及复杂度证明

    min_25 筛是由 min_25 大佬使用后普遍推广的一种新型算法,这个算法能在 \(O({n^{3\over 4}\over log~ n})\) 的复杂度内解决所有的积性函数前缀和求解问题(个人 ...

  8. uoj#448. 【集训队作业2018】人类的本质(Min_25筛+拉格朗日插值)

    题面 传送门 题解 肝了整整一天--膜拜yww和cx巨巨--(虽然它们的题解里我就没看懂几个字) 请备好草稿纸和笔,这种题目就是需要耐心推倒 题目所求是这么一个东西 \[ \begin{aligned ...

  9. [LOJ]#572. 「LibreOJ Round #11」Misaka Network 与求和 min_25筛+杜教筛

    Solution 推一下式子,容易得到一个线性做法:∑d=1nfk(d)((2∑i=1⌊ni⌋φ(i))−1)\sum_{d=1}^nf^k(d)((2\sum_{i=1}^{\lfloor{n\ov ...

最新文章

  1. 使用深度学习和树搜索进行从零开始的既快又慢的学习
  2. Java集合篇:ConcurrentHashMap详解(JDK1.8)
  3. (转)Sql Server 对锁的初步认识
  4. GIT项目管理工具(part3)--初始化仓库及查看仓库状况
  5. mysql+after+commit_Spring事务aftercommit原理及实践
  6. 【BZOJ - 3450】Tyvj1952 Easy(数学期望,期望的线性性)
  7. 使用Istio进行多集群部署管理(2):单控制平面Gateway连接拓扑
  8. 在线公开课 | 从理论走向实践,多角度详解Cloud Native
  9. 注入点批量收集工具_如何批量处理短视频,剪辑片头片尾、加图片水印
  10. 人脸识别腾讯安排上了!孩子不能再任意冒用家长身份信息
  11. android之activity跳转
  12. nginx配置文件服务器
  13. 算法的时间复杂度和空间复杂度-总结
  14. Java做彩虹进度条,Android自定义控件-彩虹条进度条
  15. 计算机二级讲座宣传语,计算机二级讲座策划书.doc
  16. Word使用中遇到的一些错误与解决办法,附2016版本office的安装方法
  17. 电脑上如何操作Android手机
  18. 流行和声(2)Major6和弦
  19. org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused: connec
  20. 项管(十六)——文档管理、配置管理、知识管理、变更管理

热门文章

  1. Android开源库介绍:AndLinker-Android 上的 IPC 库
  2. 第七周项目三-用多文件组织多个类的程序
  3. JavaScript语言基础7
  4. 【网络基础】为什么要对url进行encode呢?
  5. 【Gradle】管理库工程release及debug
  6. iOS自定义View 控件自动计算size能力
  7. (0095)iOS开发之本地文件预览的三种方法(3)
  8. (0002) iOS 开发之开发者iOS 10 正式版体验报告
  9. 二十一. Python基础(21)--Python基础(21)
  10. Alpha冲刺Day4