原题链接

庆祝!第二道数论紫题。

推式子真是太有趣了!

\[\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. Ubuntu18.04安装OpenStack

    Ubuntu18.04 安装Queens版本OpenStack 安装环境 系统 系统使用的是Ubuntu18,最少4核8G内存,20G硬盘空间. 工具 devstack DevStack是一系列可扩展 ...

  2. CPU网卡亲和绑定

    #!/bin/bash # # Copyright (c) , Intel Corporation # # Redistribution and use in source and binary fo ...

  3. Event Loop事件循环,GET!

    JS中比较让人头疼的问题之一要算异步事件了,比如我们经常要等后台返回数据后进行dom操作,又比如我们要设置一个定时器完成特定的要求.在这些同步与异步事件里,异步事件肯定是在同步事件之后的,但是异步事件 ...

  4. 推荐系统--隐语义模型LFM

    主要介绍 隐语义模型 LFM(latent factor model). 隐语义模型最早在文本挖掘领域被提出,用于找到文本的隐含语义,相关名词有 LSI.pLSA.LDA 等.在推荐领域,隐语义模型也 ...

  5. CSS——NO.9(颜色值和长度值)

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

  6. 数据库及MySQL概述

    #什么是数据 用来描述事物的符号记录.可以是数字.文字.图形等,有多种形式,经过数字化之后存入计算机 #什么是数据库 数据库(Database)就是一个用来存放数据库的仓库,是按照一定的数据结构来组织 ...

  7. 一步到位datatabls中文化

    #一步到位datatabls中文化 加入以下代码 $(document).ready(function () { $('#declarationList').DataTable({ destroy:t ...

  8. localstorage二次封装-模块模式

    var db = function () { // 本地存储前缀,减少命名冲突 var prefix = 'ydb'; return { setPrefix: function (_prefix) { ...

  9. node--静态服务器

    1.同步读取文件 const data = fs.readFileSync('./model/mime.json');   // 这里是添加了可以正常链接其他格式文件的服务器 const http = ...

  10. 复习笔记——1. C语言基础知识回顾

    1. 数据类型 1.1 基本数据类型 整型:int, long,unsigned int,unsigned long,long long-- 字符型:char 浮点型:float, double-- ...