题目:http://www.51nod.com/Challenge/Problem.html#!#problemId=1965

考虑  \( \prod_{i=1}^{n}\sigma_0^i \)

    \(=\prod_{j=1}^{p_j<=n}\prod_{t=1}^{p_j^t<=n}(t+1)^{ p_j^tS(\left\lfloor\frac{n}{p_j^t}\right\rfloor) - p_j^{t+1}S(\left\lfloor\frac{n}{p_j^{t+1}}\right\rfloor) } \)

  (其中 \( S(x)=\frac{(1+x)*x}{2} \))

对于 \( <=\sqrt(n) \) 的质数暴力枚举;对于 \( >\sqrt(n) \) 的质数只能是 1 次方,所以就是要求

    \( \sum\limits_{\sqrt(n)<p_j<=n}S(\left\lfloor\frac{n}{p_j}\right\rfloor)*p_j \)

\( S(\left\lfloor\frac{n}{p_j}\right\rfloor) \) 可以分块,所以就是要求区间内的质数个数(\( <= \sqrt(n) \) 的暴枚减掉就行);min_25 筛做一下就行。

考虑  \( \prod_{i=1}^{n}\sigma_0^{\mu(i)} \)

    \(=2^{\sum\limits_{i=1}^{n}d(i)*\mu(i)} \) ,其中 \( d(i) \) 表示 i 的质因子个数。

令 \( g(n,j)=\sum\limits_{i=1}^{n}[min_i>=p_j]\mu(i) \) , \( s(n,j)=\sum\limits_{i=1}^{n}[min_i>=p_j]d(i)*\mu(i) \)

则 \( g(n,j)=g(n,j+1)+(-1)g(\frac{n}{p_j},j+1)+(-1) \) , \( s(n,j)=s(n,j+1)+(-1)s(\frac{n}{p_j},j+1)+(-1)g(\frac{n}{p_j},j+1)+(-1) \)

对于\( min_i>\sqrt(n) \) 的部分的贡献,可以通过赋初值来处理。筛一个 \( c2 \) 表示质数个数就行。

需要注意的是在调用 \( g(\frac{n}{p_j},j+1) \) 和 \( s(\frac{n}{p_j},j+1) \) 的时候,因为 \( \frac{n}{p_j} \) 比 n 小,又有从大到小枚举 \( p_j \) 并且 \( if(p^{2}_{j}>w[i])break; \) ,所以可能 \( \frac{n}{p_j} \) 没被更新过,还是初值;这时它的值是 \( >\sqrt{\frac{n}{p_j}} \) 的质数贡献,但现在要用的是 \( 1~\sqrt{\frac{n}{p_j}} \) 里 \( min_i > p_j \) 的数的贡献;不过这种情况中有贡献的只有质数,所以像赋初值那样算一下应该贡献的值就行了。

可以用大数乘法的黑科技,就是 \( a*b%mod = a*b - \left\lfloor\frac{a*b}{mod}\right\rfloor * mod \) ,超过的部分 long long 自然溢出即可;那个除的结果需要正确,所以转成 long double 计算再赋值给 long long 即可。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
#define ld long double
using namespace std;
const ll mod=1e12+,md=mod-;/////
ll upt(ll x){while(x>=md)x-=md;while(x<)x+=md;return x;}
ll Ml(ll a,ll b,ll Md=md){ll ret=(ld)a*b/Md;return a*b-ret*Md;}
ll pw(ll x,ll k)//mod!! not md
{ll ret=;while(k){if(k&)ret=Ml(ret,x,mod);x=Ml(x,x,mod);k>>=;}return ret;}
const int N=;
int base,m,cnt; bool vis[N];
ll n,w[N],c[N],c2[N],s[N],g[N],p[N],p2[N],sp[N],sm[N];
//c:sm of P, c2:ct of P, s:u*d, g:u, p2:p^2, sp:sm of P(base), sm:(1+x)*x/2
ll cal(ll x){if(x&1ll)return Ml((+x)/,x); else return Ml(+x,x/);}
void init()
{
base=sqrt(n);m=cnt=;
memset(vis,,sizeof vis);
sm[m+]=c[m+]=;/////
for(int i=;i<=base;i++)
{
if(!vis[i])
{p[++cnt]=i;p2[cnt]=(ll)i*i;sp[cnt]=upt(sp[cnt-]+i);}
for(int j=,d;j<=cnt&&(d=i*p[j])<=base;j++)
{vis[d]=; if(i%p[j]==)break;}
}
for(ll i=,j;i<=n;i=n/j+)w[++m]=j=n/i;
for(int i=;i<=m;i++)sm[i]=cal(w[i]);
}
int Id(ll x){if(!x)return ;return x<=base?m-x+:n/x;}
void cz()
{
for(int i=;i<=m;i++)c[i]=upt(sm[i]-),c2[i]=w[i]-;
for(int j=;j<=cnt;j++)
for(int i=;i<=m&&p2[j]<=w[i];i++)
{
int k=Id(w[i]/p[j]);
c[i]=upt(c[i]-Ml(p[j],upt(c[k]-sp[j-])));
c2[i]=upt(c2[i]-(c2[k]-(j-)));
} int p0=cnt;
for(int i=;i<=m;i++)
{
while(p0&&p2[p0]>w[i])p0--;
g[i]=s[i]=upt(p0-c2[i]);//>sqrt(n)
}
int i,lst=;
for(int j=cnt;j;j--)
{
for(i=;i<=m&&p2[j]<=w[i];i++)
{
int k=Id(w[i]/p[j]);ll d1=g[k],d2=s[k];
if(k>lst)d1=upt(j-c2[k]),d2=d1;//can't use ini but only P contribt
g[i]=upt(g[i]-d1-);//-1 for p[j]
s[i]=upt(s[i]-d2-d1-);
}//g[] lack of mu[1]
lst=i-;
}
}
const int Lg=;//lg=37 t+1=38
ll cs[Lg+];
int main()
{
int T;scanf("%d",&T);
while(T--)
{
scanf("%lld",&n);init();cz();
ll ans=;memset(cs,,sizeof cs);
for(int j=;j<=cnt;j++)
{
ll m1=p[j],m2=m1*m1;//m1<=base so m2<=n for now
for(int t=;m1<=n;t++,m1=m2,m2*=p[j])//n*sqrt(n) is ok
cs[t+]=upt(cs[t+]+Ml(m1,sm[Id(n/m1)])-Ml(m2,sm[Id(n/m2)]));
}//sm[Id(n/m2)] may = sm[Id(0)] = sm[m+1]
for(int i=;i<=Lg;i++)ans=Ml(ans,pw(i,cs[i]),mod); ll ret=;//cs of 2
for(ll i=,j,d;i<=n;i=j+)
{
j=n/i;d=sm[Id(j)];j=n/j;
ret=upt(ret+Ml(d,upt(c[Id(j)]-c[Id(i-)])));/////c[Id(0)]=c[m+1]
}
for(int j=;j<=cnt;j++)ret=upt(ret-Ml(p[j],sm[Id(n/p[j])]));
ret=upt(ret+s[]+cs[]);
ans=Ml(ans,pw(,ret),mod);
printf("%lld\n",ans);
}
return ;
}

51nod 1965 奇怪的式子——min_25筛的更多相关文章

  1. 51nod 1965 奇怪的式子 —— min_25筛

    题目:http://www.51nod.com/Challenge/Problem.html#!#problemId=1965 推式子就同这里:https://www.cnblogs.com/yoyo ...

  2. 【51NOD1965】奇怪的式子 min_25筛

    题目描述 给你\(n\),求 \[ \prod_{i=1}^n{\sigma_0(i)}^{i+\mu(i)} \] 对\({10}^{12}+39\)取模. \(\sigma_0(i)\)表示约数个 ...

  3. 【51NOD1847】奇怪的数学题 min_25筛

    题目描述 记\(sgcd(i,j)\)为\(i,j\)的次大公约数. 给你\(n\),求 \[ \sum_{i=1}^n\sum_{j=1}^n{sgcd(i,j)}^k \] 对\(2^{32}\) ...

  4. 51nod1847 奇怪的数学题 (Min_25筛+第二类斯特林数)

    link \(\sum_{i=1}^n\sum_{j=1}^n\mathrm{sgcd}(i,j)^k=\sum_{p=1}^ns(p)^k\sum_{i=1}^n\sum_{j=1}^n[\gcd( ...

  5. 【51NOD 1847】奇怪的数学题(莫比乌斯反演,杜教筛,min_25筛,第二类斯特林数)

    [51NOD 1847]奇怪的数学题(莫比乌斯反演,杜教筛,min_25筛,第二类斯特林数) 题面 51NOD \[\sum_{i=1}^n\sum_{j=1}^nsgcd(i,j)^k\] 其中\( ...

  6. 51nod1965. 奇怪的式子(min_25筛)

    题目链接 http://www.51nod.com/Challenge/Problem.html#!#problemId=1965 题解 需要求的式子显然是个二合一形式,我们将其拆开,分别计算 \(\ ...

  7. 【51nod1965】奇怪的式子

    Portal --> 51nod1965 Solution 怎么说呢..这题..做的有点痛苦.. 首先看这个式子长得..比较奇怪,指数里面那个加号有点烦人,而且这个函数不是一个积性函数也有点烦人 ...

  8. 【UOJ448】【集训队作业2018】人类的本质 min_25筛

    题目大意 给你 \(n,m\),求 \[ \sum_{i=1}^n\sum_{x_1,x_2,\ldots,x_m=1}^i\operatorname{lcm}(\gcd(i,x_1),\gcd(i, ...

  9. Min_25 筛 学习笔记

    原文链接https://www.cnblogs.com/zhouzhendong/p/Min-25.html 前置技能 埃氏筛法 整除分块(这里有提到) 本文概要 1. 问题模型 2. Min_25 ...

随机推荐

  1. [.NET MVC4 入门系列01]Helloworld MVC 4 第一个MVC4程序

    [.NET MVC4 入门系列01]Helloworld MVC 4 第一个MVC4程序   一.练习项目: http://www.asp.net/mvc/tutorials/mvc-4/gettin ...

  2. Java 线程面试题 Top 50

    --> Java 线程面试题 Top 50 html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;line-height:1. ...

  3. L1-030 一帮一

    “一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组.本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中, ...

  4. 【Grails 代理Proxy设置】部署Grails遇到Error Resolve error obtaining dependencies:错误,及解决方法

    最近在使用Grails,一开始使用3.0.2版本,一直包nullpointer错误,后来使用了2.5.0版本,可以创建工程,但是在进入到工程目录后,再执行grails程序,报错了,步骤如下: 1. g ...

  5. 网络编程(socket,套接字)

    服务端地址不变 ip + mac 标识唯一一台机器 ip +端口 标识唯一客户端应用程序 套接字: 网络编程   网络编程 一.python提供了两个级别访问的网络服务 低级别的网络服务支持基本的 S ...

  6. SQL语句执行过程详解

    一.SQL语句执行原理: 第一步:客户端把语句发给服务器端执行 当我们在客户端执行select语句时, 客户端会把这条SQL语句发送给服务器端,让服务器端的进程来处理这语句.也就是说,Oracle客户 ...

  7. ZOJ 17届校赛 How Many Nines

    If we represent a date in the format YYYY-MM-DD (for example, 2017-04-09), do you know how many 9s w ...

  8. webbench-1.5_hacking

    /**************************************************************************** * * webbench-1.5_hacki ...

  9. 蓝桥杯 ALGO-1:区间k大数查询

      算法训练 区间k大数查询   时间限制:1.0s   内存限制:256.0MB        问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个 ...

  10. 在 Windows 10 中开启移动 WLAN 热点

    本文将介绍如何在 Windows 10 中开启移动 Wi-Fi 热点. This post is written in multiple languages. Please select yours: ...