【题解】Product
\(\text{Solution:}\)
\(Question:\)
\(\prod_{i=1}^n \prod_{j=1}^n \frac{lcm(i,j)}{gcd(i,j)}\)
分开得:
\]
分子即为\((n!)^{2n},\)主要方法在分母。
先不看平方,有:
\]
分解指数:
\]
线性出欧拉函数前缀和即可求出。
于是,分母可以枚举指数\(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的更多相关文章
- LintCode 896. Prime Product 简明题解
Given a non-repeating prime array arr, and each prime number is used at most once, find all the prod ...
- LeetCode Subarray Product Less Than K 题解 双指针+单调性
题意 给定一个正整数数组和K,数有多少个连续子数组满足: 数组中所有的元素的积小于K. 思路 依旧是双指针的思路 我们首先固定右指针r. 现在子数组的最右边的元素是nums[r]. 我们让这个子数组尽 ...
- [LeetCode]题解(python):152-Maximum Product Subarray
题目来源: https://leetcode.com/problems/maximum-product-subarray/ 题意分析: 给定一个数组,这个数组所有子数组都有一个乘积,那么返回最大的乘积 ...
- PAT甲题题解-1009. Product of Polynomials (25)-多项式相乘
多项式相乘 注意相乘结果的多项式要开两倍的大小!!! #include <iostream> #include <cstdio> #include <algorithm& ...
- leetCode题解之Product of Array Except Self
1.题目描述 2.题目分析 每个元素对应的积应该是 它 前面的每个元素的积,和后面的每个元素的积 3.代码 vector<int> productExceptSelf(vector< ...
- 题解 CF1206B 【Make Product Equal One】
感谢 @一个低调的人 (UID=48417) 题目: CodeForces链接 Luogu链接 思路: 这是一个一眼题 我们不妨把所有的数都看做是\(1\)(取相应的花费,如:\(6\) 的花费就是\ ...
- 洛谷 P5221 Product 题解
原题链接 庆祝!第二道数论紫题. 推式子真是太有趣了! \[\prod_{i=1}^n \prod_{j=1}^n \frac{\operatorname{lcm}(i,j)}{\gcd(i,j)} ...
- Codeforces Round #271 (Div. 2)题解【ABCDEF】
Codeforces Round #271 (Div. 2) A - Keyboard 题意 给你一个字符串,问你这个字符串在键盘的位置往左边挪一位,或者往右边挪一位字符,这个字符串是什么样子 题解 ...
- LeetCode OJ 题解
博客搬至blog.csgrandeur.com,cnblogs不再更新. 新的题解会更新在新博客:http://blog.csgrandeur.com/2014/01/15/LeetCode-OJ-S ...
随机推荐
- 笔记 | 第一个量子算法:Deutsch-Jozsa算法,非常好懂!
<关于胡小兔的博客又诈尸了这件事> 信息物理真是难啊!上节课讲了量子计算的最基础的概念和Deutsch-Jozsa算法,我看了好几天才看懂-- 等考完试估计我就忘了,所以今天先写个博客给未 ...
- Layui + tp3.2 配合表格搜索
html 部分 <!--搜索--><fieldset class="layui-elem-field layui-field-title" style=" ...
- github学生认证——申请学生开发包
写在前面 申请学生认证的好处: GitHub学生的免费AWS Educate入门帐户,价值100美元. 专业的桌面IDE:IntelliJ IDEA,PyCharm等.学生的免费订阅,每年更新一次. ...
- 20190923-07Linux搜索查找类 000 015
find 查找文件或者目录 find指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件显示在终端. 1.基本语法 find [搜索范围] [选项] 2.选项说明 表1-27 选项 功能 -n ...
- leetcode刷题-86分隔链表
题目 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前. 你应当保留两个分区中每个节点的初始相对位置. 示例: 输入: head = 1->4 ...
- 干货:不同场景容器内获取客户端源IP的方法
摘要:客户端和容器服务器之间可能存在多种不同形式的代理服务器,那容器中如何获取到客户端真实的源ip呢? k8s已经成为当今容器化的标准,人们在享受容器带来的高效与便利的同时,也遇到一些烦恼:客户端和容 ...
- .net core Configuration对象
前因:最近在阅读.net core源码,发现关于Configuration介绍的文档都比较多,但是都比较杂乱,(微软文档太官方),所以写下一些自己的感想 主要通过三种使用情况来介绍 Web应用程序使用 ...
- parseQueryString
var parseQueryString = function (url) { var reg = /([^\?\=\&]+)\=([^\?\=\&]*)/g; var o ...
- 工具-Typora常用语法()+自己总结
工具-Typora常用语法 Markdown(MD)作为目前互联网写作相当流行的一种文档撰写语言格式,深受互联网编辑者的喜爱,由此周边一些基于MD的编辑工具也随之油然而生. 作为一款免费的MD编辑器: ...
- React 和 VUE 的区别和优缺点
前言 React 是由Facebook创建的JavaScript UI框架,React推广了 Virtual DOM( 虚拟 DOM )并创造了 JSX 语法.JSX 语法的出现允许我们在 javas ...