小D的Lemon

题意

已知

\[g(x)=\left\{\begin{matrix}
1&,x=1\\
\sum_{i=1}^qk_i&,otherwise
\end{matrix}\right.
\]

\[\prod_{i=1}^n\prod_{j=1}^mg(\gcd(i,j))
\]

说明

多组数据,\(T\le 1000,n,m\le 250000\)


式子太久没推都推不好了...

\[\begin{aligned}
\prod_{i=1}^n\prod_{j=1}^m g(\gcd(i,j))=&\prod_{d=1}^ng(d)^{\sum\limits_{i=1}^n\sum\limits_{j=1}^m[\gcd(i,j)=d]}\\
=&\prod_{d=1}^{\min(n,m)}g(d)^{\sum\limits_{k=1}^{\min(\lfloor\frac{n}{d}\rfloor,\rfloor\frac{m}{d}\rfloor)}\mu(k)\lfloor\frac{n}{dk}\rfloor\lfloor\frac{m}{dk}\rfloor}\\
=&\prod_{T=1}^{\min(n,m)}(\prod_{d|T}g(d)^{\mu(\frac{T}{d})})^{\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor}
\end{aligned}
\]

把括号里面的预处理出来就可以了

复杂度\(O(n\sqrt n+T\log n\sqrt n)\)或者\(O(n\ln n+T\log n\sqrt n)\)


Code:

#include <cstdio>
const int N=250000;
const int mod=1e9+7;
int min(int x,int y){return x<y?x:y;}
inline int add(int x,int y){return x+y>=mod?x+y-mod:x+y;}
#define mul(x,y) (1ll*(x)*(y)%mod)
int qp(int d,int k){int f=1;while(k){if(k&1)f=mul(f,d);d=mul(d,d),k>>=1;}return f;}
int g[N+10],mu[N+10],ispri[N+10],pri[N+10],yuu[N+10],yuuinv[N+10],cnt,inv[21];
int cal(int x,int y)
{
if(y==1) return x;
if(y==0) return 1;
return inv[x];
}
void init()
{
g[1]=mu[1]=1;
for(int i=2;i<=N;i++)
{
if(!ispri[i])
{
pri[++cnt]=i;
g[i]=1;
mu[i]=-1;
}
for(int j=1;j<=cnt&&pri[j]*i<=N;j++)
{
int x=pri[j]*i;
ispri[x]=1;
g[x]=g[i]+1;
if(i%pri[j]) mu[x]=-mu[i];
else break;
}
}
for(int i=1;i<=20;i++) inv[i]=qp(i,mod-2);
yuu[0]=yuuinv[0]=1;
for(int j,i=1;i<=N;i++)
{
int bee=1;
for(j=1;j*j<i;j++)
{
if(i%j) continue;
bee=mul(bee,cal(g[j],mu[i/j]));
bee=mul(bee,cal(g[i/j],mu[j]));
}
if(j*j==i) bee=mul(bee,cal(g[j],mu[i/j]));
yuu[i]=mul(yuu[i-1],bee);
}
for(int i=1;i<=N;i++) yuuinv[i]=qp(yuu[i],mod-2);
}
int main()
{
init();
int T,n,m;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
int ans=1;
for(int l=1,r;l<=min(n,m);l=r+1)
{
r=min(n/(n/l),m/(m/l));
ans=mul(ans,qp(mul(yuu[r],yuuinv[l-1]),1ll*(n/l)*(m/l)%(mod-1)));
}
printf("%d\n",ans);
}
return 0;
}

2019.2.16

牛客练习赛 小D的Lemon 解题报告的更多相关文章

  1. 牛客练习赛 小A与任务 解题报告

    小A与任务 链接: https://ac.nowcoder.com/acm/contest/369/B 来源:牛客网 题目描述 小A手头有 \(n\) 份任务,他可以以任意顺序完成这些任务,只有完成当 ...

  2. 牛客练习赛 小D的剑阵 解题报告

    小D的剑阵 题意链接: https://ac.nowcoder.com/acm/contest/369/F 来源:牛客网 现在你有 \(n\) 把灵剑,其中选择第i把灵剑会得到的 \(w_i\) 攻击 ...

  3. 牛客OI周赛7-普及组 解题报告

    出题人好评. 评测机差评. A 救救喵咪 二位偏序.如果数据范围大的话直接树状数组,不过才1000就\(O(n^2)\)暴力就ok了. #include <bits/stdc++.h> s ...

  4. nowcoder(牛客网)OI测试赛2 解题报告

    qwq听说是一场普及组难度的比赛,所以我就兴高采烈地过来了qwq 然后发现题目确实不难qwq.....但是因为蒟蒻我太蒻了,考的还是很差啦qwq orz那些AK的dalao们qwq 赛后闲来无事,弄一 ...

  5. 牛客练习赛 小A与最大子段和 解题报告

    小A与最大子段和 题意 在一个序列 \(\{a\}\) 里找到一个非空子段 \(\{b\}\), 满足 \(\sum\limits_{i=1}^{|b|}b_i\times i\) 最大 \(n\le ...

  6. 牛客OI赛制测试赛3 解题报告

    前话: 话说考试描述:普及难度. 于是想在这场比赛上涨点信心. 考出来的结果:Point:480     Rank:40 然而同机房的最好成绩是 510. 没考好啊!有点炸心态,D题一些细节没有注意, ...

  7. 牛客 NOIp模拟1 T1 中位数 解题报告

    中位数 题目描述 小\(N\)得到了一个非常神奇的序列\(A\).这个序列长度为\(N\),下标从\(1\)开始.\(A\)的一个子区间对应一个序列,可以由数对\([l,r]\)表示,代表\(A[l] ...

  8. 牛客 NOIp模拟1 T3 保护 解题报告

    保护 题目描述 \(C\)国有\(n\)个城市,城市间通过一个树形结构形成一个连通图.城市编号为\(1\)到\(n\),其中\(1\)号城市为首都.国家有\(m\)支军队,分别守卫一条路径的城市.具体 ...

  9. nowcoder(牛客网)OI测试赛3 解题报告

    昨天因为胡搞了一会儿社团的事情,所以错过(逃过)了nowcoder的测试赛..... 以上,听说还是普及组难度qwq,而且还有很多大佬AK(然而我这么蒻肯定还是觉得有点难度的吧qwq) 不过我还是日常 ...

随机推荐

  1. Luogu P3455 [POI2007]ZAP-Queries

    由于之前做了Luogu P2257 YY的GCD,这里的做法就十分套路了. 建议先看上面一题的推导,这里的话就略去一些共性的地方了. 还是和之前一样设: \[f(d)=\sum_{i=1}^a \su ...

  2. maven项目中 org.hibernate.MappingNotFoundException: resource:*.hbm.xml not found问题的解决方案

    是因为*.hbm.xml没有放到resource的mapper下导致的 对于Maven工程,编译的工作是由Maven程序来完成的,而Maven默认只会把src/main/resources文件夹下的文 ...

  3. 画了一张基于Spring Cloud的微服务系统架构图

  4. phpstorm 报错及解决

    1. 当项目里有大量 js 文件时,一旦编辑包含 js 的文件,phpstorm 会卡顿,甚至未响应 问题原因: 内存限制较小 解决方法一: 直接将弹出框中的红色部分修改为需要的内存限制,并选择 Sh ...

  5. <a>标签中href="javascript:;"** 为什么 style不用src**

    &src/href <!--href 用于标示资源和文档关系,src 用于替换标签内容--> <img src="xxx.jpg"/> <sc ...

  6. BugPhobia开发篇章:Beta阶段第VIII次Scrum Meeting

    0x01 :Scrum Meeting基本摘要 Beta阶段第八次Scrum Meeting 敏捷开发起始时间 2015/12/22 00:00 A.M. 敏捷开发终止时间 2015/12/22 23 ...

  7. linux及安全第六周总结

    进程控制块pcb——task_struct 操作系统三大功能: 进程管理(核心) 内存管理 文件系统 为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符提供了内核所需了解的进程信息: 进程状态 ...

  8. android 活动的生命周期

    掌握活动的生命周期非常重要,因为一个正常的android应用,会有很多的活动,如何在这些活动之间进行切换.数据的交互等,就经常会用到活动的生命周期这一块的知识.可以说,只要掌握了活动的生命周期,才能更 ...

  9. The MathType Dll cannot be found 问题解决办法

    被这个问题困扰了许久,找到了解决办法,没想到最后居然是因为mathtype安装路径里的文件位置有问题(至少我是这么认为的).是这样的,在安装完mathtype6.9b后,发现打开word2013是正常 ...

  10. FileUtils功能概述

    https://commons.apache.org/proper/commons-io/javadocs/api-release/org/apache/commons/io/FileUtils.ht ...