原题链接

庆祝!第二道数论紫题。

推式子真是太有趣了!

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

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

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

先看前面的式子:

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

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

\[= (n!)^{2 \times n}
\]

再看后面的式子:(先抛开 \(-2\) 次方,最后再说)

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

\[= \prod_{d=1}^n d^{\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \sum_{j=1}^{\lfloor \frac{n}{d} \rfloor} [\gcd(i,j) == 1]}
\]

先看指数:

\[\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \sum_{j=1}^{\lfloor \frac{n}{d} \rfloor} [\gcd(i,j) == 1]
\]

\[= 2 \times (\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \phi_i) - 1
\]

(这步的依据参照 洛谷 P2568 GCD

显然这个东西,用 欧拉筛前缀和 就可以搞定!

用 \(f_i\) 表示 \(phi_i\) 的前缀和。

所以最终答案是:

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

\[= (n!)^{2 \times n} \times \prod_{d=1}^n d^{(2 \times f_{\lfloor \frac{n}{d} \rfloor} - 1)^{-2}}
\]

这样,就可以用 \(O(n \log n)\) 解决问题。

可是,你会发现,这道题目时间限制和空间限制都有点紧,而且常数还挺大,所以不得不考虑优化。

而且, \(f\) 数组爆 \(\texttt{long long}\) 之后,似乎不能随便取模,这是个难题。

注:带个 \(\log\) 是因为我们需要计算快速幂。

我们发现 \(104857601\) 是个质数。那么模质数呢,可以直接用在质数上模掉。

欧拉定理即:

\[a^{\phi_p} \equiv 1 \pmod p
\]

所以,再化一步:

\[= (n!)^{2 \times n} \times \prod_{d=1}^n d^{((2 \times f_{\lfloor \frac{n}{d} \rfloor} - 1) \% (MOD-1))^{-2}}
\]

然后呢,直接一波 欧拉筛 解决问题!

#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std; typedef long long ll;
const ll MOD=104857601;
const int N=1e6+1;
const int N1=1e5+1; inline ll read(){char ch=getchar();int f=1;while(ch<'0' || ch>'9') {if(ch=='-') f=-f; ch=getchar();}
ll x=0;while(ch>='0' && ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x*f;} int n,phi[N],prime[N1],f=0;
bool h[N]; ll k=1; inline ll pw(ll x,ll y) {
ll ans=1; while(y) {
if(y&1) ans=(ans*x)%MOD;
x=(x*x)%MOD; y>>=1;
} return ans;
} //快速幂模板 inline void Euler() {
phi[1]=1; h[1]=1;
for(int i=2;i<=n;i++) {
k=(ll(k*i)%MOD); //顺便处理个阶乘
if(!h[i]) prime[++f]=i,phi[i]=i-1;
for(int j=1;j<=f && i*prime[j]<=n;j++) {
h[i*prime[j]]=1;
if(i%prime[j]==0) {
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
phi[i*prime[j]]=phi[i]*(prime[j]-1);
}
}
} //欧拉筛模板 int main(){
n=read(); Euler();
// printf("%lld\n",k);
k=pw(k,n<<1); ll ans=1; //第一部分的值
// printf("%lld\n",k);
// for(int i=1;i<=n;i++) printf("%d ",phi[i]);
// putchar('\n');
for(int i=1;i<=n;i++) phi[i]=(phi[i]<<1)+phi[i-1]%(MOD-1); //计算2倍的时候直接模掉
for(int i=2;i<=n;i++) ans=(ans*pw(i,phi[n/i]-1))%MOD; //第二部分
printf("%lld\n",(k*pw(ll(ans*ans)%MOD,MOD-2))%MOD); //然后 -2 次方,就是2次方的倒数,而倒数已经转换为逆元
return 0;
}

洛谷 P5221 Product 题解的更多相关文章

  1. 洛谷NOIp热身赛题解

    洛谷NOIp热身赛题解 A 最大差值 简单树状数组,维护区间和.区间平方和,方差按照给的公式算就行了 #include<bits/stdc++.h> #define il inline # ...

  2. 洛谷P2827 蚯蚓 题解

    洛谷P2827 蚯蚓 题解 题目描述 本题中,我们将用符号 ⌊c⌋ 表示对 c 向下取整. 蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓. 蛐蛐国里现 ...

  3. 洛谷P1816 忠诚 题解

    洛谷P1816 忠诚 题解 题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人 ...

  4. [POI 2008&洛谷P3467]PLA-Postering 题解(单调栈)

    [POI 2008&洛谷P3467]PLA-Postering Description Byteburg市东边的建筑都是以旧结构形式建造的:建筑互相紧挨着,之间没有空间.它们共同形成了一条长长 ...

  5. [NOI 2020 Online] 入门组T1 文具采购(洛谷 P6188)题解

    原题传送门 题目部分:(来自于考试题面,经整理) [题目描述] 小明的班上共有 n 元班费,同学们准备使用班费集体购买 3 种物品: 1.圆规,每个 7 元. 2.笔,每支 4 元. 3.笔记本,每本 ...

  6. [洛谷P3948]数据结构 题解(差分)

    [洛谷P3948]数据结构 Description 最开始的数组每个元素都是0 给出n,opt ,min,max,mod 在int范围内 A: L ,R ,X 表示把[l,R] 这个区间加上X(数组的 ...

  7. [CodePlus 2017 11月赛&洛谷P4058]木材 题解(二分答案)

    [CodePlus 2017 11月赛&洛谷P4058]木材 Description 有 n棵树,初始时每棵树的高度为 Hi ,第 i棵树每月都会长高 Ai.现在有个木料长度总量为 S的订单, ...

  8. 洛谷P1189 SEARCH 题解 迭代加深

    题目链接:https://www.luogu.com.cn/problem/P1189 题目大意: 给你一个 \(n \times m\) 的矩阵,其中有一些格子可以走,一些各自不能走,然后有一个点是 ...

  9. NOIP 2016 洛谷 P2827 蚯蚓 题解

    题目传送门 展开 题目描述 本题中,我们将用符号[c]表示对c向下取整,例如:[3.0」= [3.1」=[3.9」=3.蛐蛐国最近蚯蚓成灾了!隔壁跳 蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手 ...

随机推荐

  1. 码海拾遗:strcpy()、strncpy()和strcpy_s()区别

    1.strcpy() 原型:char *strcpy(char *dst,const char *src) 功能:将以src为首地址的字符串复制到以dst为首地址的字符串,包括'\0'结束符,返回ds ...

  2. drbd配置

    DRBD就是网络RAID1,可以通过网络同步两个主机上的硬盘,drbd每次只允许对一个节点进行读写访问. 一.安装DRBD CentOS 6.x rpm -ivh http://www.elrepo. ...

  3. React Native Build Apk

    1 React Native安卓项目打包APK 1.1 产生签名的key 先通过keytool生成key 1 keytool -genkey -v -keystore demo-release-key ...

  4. Python 异常处理中的 esle

    前言 我们知道,在Python中,我们是用try- -excetp- - 来做异常处理的,但Python 有别于其他语法的是在异常处理中还提供了else的处理场景,是的,你没看错,就是在条件判断if- ...

  5. 01.JS块级作用域与let

    1.块级作用域   什么是:         在一个代码块(括在一对花括号中的一组语句)中定义的所需变量(与let配合使用)并在代码块的外部是不可见的.   为什么:         在ES6之前,函 ...

  6. C++走向远洋——35(友元,时间)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:time.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  7. 视频描述(Video Captioning)近年重要论文总结

    视频描述 顾名思义视频描述是计算机对视频生成一段描述,如图所示,这张图片选取了一段视频的两帧,针对它的描述是"A man is doing stunts on his bike", ...

  8. pycharm 关于模块安装出现的“[error] Microsoft Visual C++ 14.0 is required” 解决办法

    刚才正准备对pycharm进行一番操作的时候,噔  噔磴噔噔 “no module define xxx” ,那我当然要把xxx给搞到pycharm上来啊, 不一会功夫 ,biu~ “[error] ...

  9. 扫描神器nmap使用教程

    总结 nmap -v 详细信息输出nmap -p 指定端口nmap -iL 扫描文件中的ipnmap -exclude 不扫描某些ipnmap -Pn 使用ping扫描,显式地关闭端口扫描,用于主机发 ...

  10. jquery-购物车js

    购物车示例js,为了方便参考,页面写的比较简单.示例如下图所示: html代码如下: <!doctype html> <html lang="en"> &l ...