luogu4917天守阁的地板
https://www.zybuluo.com/ysner/note/1317548---
题面
给出\(n\),用所有长为\(a\)、宽为\(b\)\((1\leq a,b\leq n)\)的长方形拼成正方形,最少需多少块?
多组数据。
- \(30pts\) \(n\leq100,T\leq100\)
- \(60pts\) \(n\leq3*10^4,T\leq300\)
- \(100pts\) \(a,b\leq10^5,T\leq1000\)
解析
显然答案是$$\frac{lcm(a,b)}{a}*\frac{lcm(a,b)}{b}$$
暴力复杂度\(O(Tn^2logn)\),可以通过\(30pts\)。
考虑推推柿子。
\]
\]
\]
\]
现在问题是\(\prod_{a=1}^n\prod_{b=1}^ngcd(a,b)\)。
这个复杂度\(O(n^2)\),很不划算。
考虑枚举最大公约数的值。
则化为
\]
\]
这个指数怎么化呢?
我们可以强制\(a>b\),那么指数为\(\sum_{a=1}^{\lfloor\frac{n}{d}\rfloor}\varphi(a)\)
如果不强制,考虑到\(\varphi(1)=1\)的特殊情况,柿子可化为:
\]
然后线性预处理一下欧拉函数前缀和,这样复杂度\(O(Tn)\),\(60pts\)稳了。
然后吗,注意到\(\lfloor\frac{n}{d}\rfloor\)在一段区间内是相同的,可以数论分块。
于是就做完了。
预处理逆元后,复杂度\(O(T\sqrt n\))。
#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define ll long long
#define re register
#define il inline
#define fp(i,a,b) for(re int i=a;i<=b;i++)
#define fq(i,a,b) for(re int i=a;i>=b;i--)
using namespace std;
const int mod=19260817,N=1e6+100;
int a,b,jc[N],pri[N],ol[N],n,tot,inv[mod+100];
ll ans,gu;
bool vis[N];
il ll gi()
{
re ll x=0,t=1;
re char ch=getchar();
while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
if(ch=='-') t=-1,ch=getchar();
while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
return x*t;
}
il ll ksm(re ll S,re ll n)
{
re ll T=S;S=1;
if(n<0) return 0;
while(n)
{
if(n&1) S=S*T%mod;
T=T*T%mod;
n>>=1;
}
return S;
}
il void Pre(re int n)
{
ol[1]=1;
fp(i,2,n)
{
if(!vis[i]) pri[++tot]=i,ol[i]=i-1;
for(re int j=1;j<=tot&&i*pri[j]<=n;++j)
{
vis[i*pri[j]]=1;
if(i%pri[j]) ol[i*pri[j]]=ol[i]*(pri[j]-1);
else {ol[i*pri[j]]=ol[i]*pri[j];break;}
}
}
fp(i,1,n) (ol[i]+=ol[i-1])%=(mod-1);
jc[0]=1;fp(i,1,n) jc[i]=1ll*jc[i-1]*i%mod;
inv[0]=inv[1]=1;fp(i,2,mod) inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
}
int main()
{
re int T=gi();
Pre(1e6);
while(T--)
{
n=gi();
ans=ksm(jc[n],2*n);gu=1;
re int L=0;
for(re int i=1;i<=n;i=L+1)
{
L=n/(n/i);
(gu*=ksm(1ll*jc[L]*inv[jc[i-1]]%mod,2*ol[n/i]-1))%=mod;
}
(ans*=inv[gu*gu%mod])%=mod;
printf("%lld\n",ans);
}
return 0;
}
luogu4917天守阁的地板的更多相关文章
- 【洛谷】4917:天守阁的地板【欧拉函数的应用】【lcm与gcd】【同除根号优化】
P4917 天守阁的地板 题目背景 在下克上异变中,博丽灵梦为了找到异变的源头,一路打到了天守阁 异变主谋鬼人正邪为了迎击,将天守阁反复颠倒过来,而年久失修的天守阁也因此掉下了很多块地板 异变结束后, ...
- Luogu 4917 天守阁的地板(莫比乌斯反演+线性筛)
既然已经学傻了,这个题当然是上反演辣. 对于求积的式子,考虑把[gcd=1]放到指数上.一通套路后可以得到∏D∏d∏i∏j (ijd2)μ(d) (D=1~n,d|D,i,j=1~n/D). 冷静分析 ...
- [ Luogu 4917 ] 天守阁的地板
\(\\\) \(Description\) 定义二元函数\(F(x,y)\)表示,用 \(x\times y\) 的矩形不可旋转的铺成一个任意边长的正方形,所需要的最少的矩形个数. 现在\(T\)组 ...
- 省选前的th题
沙茶博主终于整完了知识点并学完了早该在NOIP之前学的知识们 于是终于开始见题了,之前那个奇怪的题单的结果就是这个了 题目按沙茶博主的做题顺序排序 个人感觉(暂时)意义不大的已被自动忽略 洛谷 491 ...
- X000011
P1890 gcd区间 \(\gcd\) 是满足结合律的,所以考虑用 ST 表解决 时间复杂度 \(O((n\log n+m)\log a_i)\) 考虑到 \(n\) 很小,你也可以直接算出所有的区 ...
- Hihocoder 太阁最新面经算法竞赛18
Hihocoder 太阁最新面经算法竞赛18 source: https://hihocoder.com/contest/hihointerview27/problems 题目1 : Big Plus ...
- hihoCoder太阁最新面经算法竞赛15
hihoCoder太阁最新面经算法竞赛15 Link: http://hihocoder.com/contest/hihointerview24 题目1 : Boarding Passes 时间限制: ...
- vijos1144(小胖守皇宫)
也是ural1039 描述 huyichen世子事件后,xuzhenyi成了皇上特聘的御前一品侍卫. 皇宫以午门为起点,直到后宫嫔妃们的寝宫,呈一棵树的形状:某些宫殿间可以互相望见.大内保卫森严,三步 ...
- zz 圣诞丨太阁所有的免费算法视频资料整理
首发于 太阁实验室 关注专栏 写文章 圣诞丨太阁所有的免费算法视频资料整理 Ray Cao· 12 小时前 感谢大家一年以来对太阁实验室的支持,我们特地整理了在过去一年中我们所有的原创算法 ...
随机推荐
- PTA 01-复杂度1 最大子列和问题 (20分)
题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/709 5-1 最大子列和问题 (20分) 给定KK个整数组成的序列{ N_1N1 ...
- BZOJ 2763: [JLOI2011]飞行路线 【SPFA】
Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一定的价格.Al ...
- Hotel(poj 3667)
题意:询问区间最长连续空串 /* 用线段树维护区间最长连续左空串和右空串 */ #include<cstdio> #include<iostream> #define N 50 ...
- BZOJ1710: [Usaco2007 Open]Cheappal 廉价回文
len<=2000的字符串上,给出删掉和添加每种字符的花费,求把字符串变成回文串的最小花费. 首先每个字符添加和删除是一样的,因此花费在添加和删掉每个字符的花费中取小的. 如果每个字符的花费都是 ...
- jQuery根据属性模糊匹配元素
1.查看带有指定属性的元素: [attribute] 例如: $("div[id]") 2.查看属性值是某个特定值的元素: [attribute=value] 例如: $(&quo ...
- 转 蓝桥杯 历届试题 波动数列 [ dp ]
传送门 历届试题 波动数列 时间限制:1.0s 内存限制:256.0MB 锦囊1 锦囊2 锦囊3 问题描述 观察这个数列: 1 3 0 2 -1 1 -2 ... 这个 ...
- lightoj 1293 - Document Analyzer [ 两指针 + 字符串 ]
传送门 1293 - Document Analyzer PDF (English) Statistics Forum Time Limit: 3 second(s) Memory Limit: ...
- wordpress网站后台打开速度很慢解决方法?
今天就和朋友们分享下,wordpress网站后台最近打开速度很慢的原因及解决方法.推荐第三种方法 方法/步骤 1.安装插件:在插件中搜索 Disable Google Fonts,选择安装,然后启 ...
- 洛谷——P1047 校门外的树
P1047 校门外的树 题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0 ...
- 【TFS 2017 CI/CD系列 - 02】-- Build篇
.创建Build 登录TFS,在现有的[Projects]中选择一个需要要创建Build的Project,点击[Build & Release]跳转页面 在新页面中选择[Builds]选项卡, ...