\(\color{brown}{Link}\)

\(\text{Solution:}\)

\(Question:\)

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

分开得:

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

分子即为\((n!)^{2n},\)主要方法在分母。

先不看平方,有:

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

分解指数:

\[\sum_{i=1}^n \sum_{j=1}^n [gcd(i,j)=d]=\sum_{i=1}^{\frac{n}{d}}\sum_{j=1}^{\frac{n}{d}}[gcd(i,j)=1]=\sum_{i=1}^{\frac{n}{d}}2\varphi(i)-1
\]

线性出欧拉函数前缀和即可求出。

于是,分母可以枚举指数\(O(n\log n)\)算出。

注意到,模数是质数,所以根据欧拉定理,令指数对\(\varphi(mod)=mod-1\)取模即可免去\(\text{long long.}\)

注意到空间限制,线筛的\(vis\)数组可以用\(bitset.\)不要浪费多余空间。减少模的数量,以加快速度。

#include<bits/stdc++.h>
using namespace std;
const int mod=104857601;
const int MAXN=1e6+1;
bitset<MAXN+5>vis;
int p[MAXN+5],phi[MAXN+5],cnt,N,Ans,F,res;
inline int mul(int a,int b){return 1ll*a*b%mod;}
inline int add(int x,int y){return (x+y)%mod;}
void predo(){
phi[1]=1;F=1;int n=N;
for(int i=2;i<=n;++i){
F=1ll*F*i%mod;
if(!vis[i])phi[i]=i-1,p[++cnt]=i;
for(int j=1;j<=cnt&&i*p[j]<=n;++j){
vis[i*p[j]]=1;
if(i%p[j]==0){
phi[i*p[j]]=(phi[i]*p[j]);
break;
}
phi[i*p[j]]=(phi[i]*(p[j]-1));
}
}
for(int i=1;i<=n;++i){
phi[i]=phi[i]*2+phi[i-1];
phi[i]%=(mod-1);
}
}
inline int qpow(int a,int b){
res=1;
while(b){
if(b&1)res=mul(res,a);
a=mul(a,a);b>>=1LL;
}
return res;
}
int main(){
scanf("%d",&N);
predo();
F=qpow(F,2*N);Ans=1;
for(int i=2;i<=N;++i){Ans=1ll*Ans*qpow(i,phi[N/i]-1)%mod;}
Ans*=1ll;
Ans=mul(Ans,Ans);
Ans=qpow(Ans,mod-2);
Ans=mul(Ans,F);
printf("%lld\n",Ans);
return 0;
}

【题解】Product的更多相关文章

  1. LintCode 896. Prime Product 简明题解

    Given a non-repeating prime array arr, and each prime number is used at most once, find all the prod ...

  2. LeetCode Subarray Product Less Than K 题解 双指针+单调性

    题意 给定一个正整数数组和K,数有多少个连续子数组满足: 数组中所有的元素的积小于K. 思路 依旧是双指针的思路 我们首先固定右指针r. 现在子数组的最右边的元素是nums[r]. 我们让这个子数组尽 ...

  3. [LeetCode]题解(python):152-Maximum Product Subarray

    题目来源: https://leetcode.com/problems/maximum-product-subarray/ 题意分析: 给定一个数组,这个数组所有子数组都有一个乘积,那么返回最大的乘积 ...

  4. PAT甲题题解-1009. Product of Polynomials (25)-多项式相乘

    多项式相乘 注意相乘结果的多项式要开两倍的大小!!! #include <iostream> #include <cstdio> #include <algorithm& ...

  5. leetCode题解之Product of Array Except Self

    1.题目描述 2.题目分析 每个元素对应的积应该是 它 前面的每个元素的积,和后面的每个元素的积 3.代码 vector<int> productExceptSelf(vector< ...

  6. 题解 CF1206B 【Make Product Equal One】

    感谢 @一个低调的人 (UID=48417) 题目: CodeForces链接 Luogu链接 思路: 这是一个一眼题 我们不妨把所有的数都看做是\(1\)(取相应的花费,如:\(6\) 的花费就是\ ...

  7. 洛谷 P5221 Product 题解

    原题链接 庆祝!第二道数论紫题. 推式子真是太有趣了! \[\prod_{i=1}^n \prod_{j=1}^n \frac{\operatorname{lcm}(i,j)}{\gcd(i,j)} ...

  8. Codeforces Round #271 (Div. 2)题解【ABCDEF】

    Codeforces Round #271 (Div. 2) A - Keyboard 题意 给你一个字符串,问你这个字符串在键盘的位置往左边挪一位,或者往右边挪一位字符,这个字符串是什么样子 题解 ...

  9. LeetCode OJ 题解

    博客搬至blog.csgrandeur.com,cnblogs不再更新. 新的题解会更新在新博客:http://blog.csgrandeur.com/2014/01/15/LeetCode-OJ-S ...

随机推荐

  1. 拾色器,可以取出电脑屏幕的任何颜色,ui以及程序员前端等常用软件,文件很小,300K

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985,转载请说明出处. 今天给大家介绍一个小软件,挺实用的,叫做拾色器. 用途:取出电脑屏幕的任意颜色,当你 ...

  2. android Studio(3.1) 常用快捷键

    说  明 快捷键 全部保存 Ctrl + S 最大话/最小化编辑器 Ctrl + Shift + F12 搜索内容(包括代码和菜单) 按两次Shift 查找 Ctrl + F 查找下一个 F3 查找上 ...

  3. 基于模板特化的Lua自动绑定系统

    LuaBind http://www.rasterbar.com/products/luabind.html http://blog.sina.com.cn/s/blog_646817c00100gk ...

  4. Linux 操作系统 基础

    root: 管理员 /: 根目录[windows : 计算机] ~: 家目录: 管理员:/root/.. 非管理员:/home/... 命令提示符: [root@localhost abc]#: ro ...

  5. vue 0点定时网络请求

    export default { data() { return { timer: null, currentTime: '', zeroTime: '00:00:05', // zeroTime: ...

  6. 时间选择器 element

    <el-date-picker type="datetime" placeholder="选择上线日期" :picker-options="st ...

  7. 01vue.config.js

      const path = require('path'); module.exports = { // 基本路径 publicPath: process.env.NODE_ENV === 'pro ...

  8. 原生JDK网络编程- NIO之Reactor模式

    “反应”器名字中”反应“的由来: “反应”即“倒置”,“控制逆转”,具体事件处理程序不调用反应器,而向反应器注册一个事件处理器,表示自己对某些事件感兴趣,有时间来了,具体事件处理程序通过事件处理器对某 ...

  9. netty如何进行单元测试

    一种特殊的Channel 实现——EmbeddedChannel,它是Netty 专门为改进针对ChannelHandler 的单元测试而提供的. 将入站数据或者出站数据写入到EmbeddedChan ...

  10. Kubernetes中资源清单与Pod的生命周期(二)

    一.资源清单 1,定义: 在k8s中一般使用yaml格式的文件来创建符合我们预期的资源,这样的yaml被称为资源清单. 使用资源清单创建Pod: kubectl apply -f nginx.yaml ...