luogu P1445 [Violet]嘤F♂A】的更多相关文章

博主决定更博文啦 这道题一开始没什么思路啊qwq 要求 \(\frac{1}{x}+\frac{1}{y}=\frac{1}{n!}\) 的正整数解总数 首先通分,得 \[\frac{x+y}{xy}=\frac{1}{n!}\] 然后移项,得 \[n!(x+y)=xy\] ↑止步于此↑ \[n!(x+y)-xy=0\] 这里令\(y=n!+k(k\in N^*)\),因为由原方程得出\(y\)是大于\(n!\)的 原方程变为 \[n!(x+(n!+k))-x(n!+k)=0\] \[(n!)^…
Luogu P1445[Violet]樱花/P4167 [Violet]樱花 真·双倍经验 化简原式: $$\frac{1}{x}+\frac{1}{y}=\frac{1}{n!}$$ $$\frac{xy}{x+y}=n!$$ $$xy=n!(x+y)$$ $$-n!(x+y)+xy=0$$ $$(n!x+n!y)-xy=0$$ $$(n!)^2+(n!x+n!y)-xy=(n!)^2$$ $$(x-n!)(y-n!)=(n!)^2$$ 所以$(x-n!)$就是$(n!)^2$的一个因子. 又…
洛谷P1445 [Violet] 樱花 题目背景 我很愤怒 题目描述 求方程 1/X+1/Y=1/(N!) 的正整数解的组数,其中N≤10^6. 解的组数,应模1e9+7. 输入输出格式 输入格式: 输入一个整数N 输出格式: 输出答案 输入输出样例 输入样例#1: 1439 输出样例#1: 102426508 Solution 极其恶心的一道题... 看到这种题肯定是需要化简式子的,因为出题人不会好到给你一个好做的式子 \[\frac{1}{x}+\frac{1}{y}=\frac{1}{n!…
P1445 [Violet]樱花 显然$x,y>n$ 那么我们可以设$a=n!,y=a+t(t>0)$ 再对原式通分一下$a(a+t)+ax=x(a+t)$ $a^{2}+at+ax=ax+tx$ $x=a^{2}/t+a$ $x=(n!)^{2}/t+n!$ 再根据唯一分解定理 $(n!)^{2}=q_{1}^{p_{1}}*q_{2}^{p_{2}}*q_{3}^{p_{3}}*......*q_{m}^{p_{m}}$ 将$(n!)^{2}$分解质因数一下 最后乘法原理套上去 end.…
洛谷P1445:https://www.luogu.org/problemnew/show/P1445 推导过程 1/x+1/y=1/n! 设y=n!+k(k∈N∗) 1/x​+1/(n!+k)​=1/n!​ 等式两边同乘x*n!*(n!+k)得 n!(n!+k)+xn!=x(n!+k) 移项得 n!(n!+k)=x(n!+k)−xn!=xk x=n!(n!+k)​/k=(n!)2​/k+n! 因为x为正整数 所以(n!)2​/k+n!为正整数0. 因为n!为正整数 所以只要(n!)2​/k为正…
传送门 看到题目就要开始愉快地推式子 原式 $\frac{1}{x}+\frac{1}{y}=\frac{1}{n!}$ $\rightarrow \frac{x+y}{xy}=\frac{1}{n!} \rightarrow (x+y)n!=xy \rightarrow xy-(x+y)n!=0$ 两边同时加上 $(n!)^2$ 得 $xy-(x+y)n!+(n!)^2=(n!)^2\rightarrow (x-n!)(y-n!)=(n!)^2$ 设$a=(x-n!),b=(y-n!)$,则原…
这道题算是好好写了.写了三种方法. 有一个好像是$qwq$$N\sqrt(N)$的方法,,但是恳请大佬们帮我看看为什么这么慢$qwq$(后面的第三种) 注:$pos[i]$表示$i$属于第$pos[i]$块. 第一种是统计所有可能的块组成的区间中(第i块到第j块),每个数出现的次数,记做$f[i][j][k]$,和所有可能的块组成的区间的答案,记做$h[i][j]$. 然后每次先把整块的答案作为初始答案,然后对于散块中的每个值$vl$,暴力修改对应的$f[i][j][vl]$,更新答案. 当块长…
传送门 二维平面修改+查询,cdq分治可以解决. 求关于某个点曼哈顿距离(x,y坐标)最近的点——dis(A,B) = |Ax-Bx|+|Ay-By| 但是如何去掉绝对值呢? 查看题解发现假设所有的点都在查询点的左下方,dis(A,B) = (Ax-Bx)+(Ay-By) = (Ax+Ay)-(Bx+By) 只要求满足Bx<Ax,By<Ay且Bx,By之和最大的点就好了. 那么如何把所有的点转化到该查询的左下呢? 对于每个查询,可以把一.二.四象限的点都通过对称转移到第三象限.但查询很多,不可…
嘟嘟嘟 分块经典题竟然是一道黑题…… 分块求区间众数的大体思想是对于询问区间[L, R],预处理出这中间的整块的众数,然后统计两边零散的数在[L, R]中出现的次数,最后取出现次数最多且最小的数. 因此需要一个sum[i][j]表示前 i 块中数字 j 出现的次数,ans[i][j]表示块 i 到 j 的众数.预处理sum用前缀和的思想,O(n√n)可完成.预处理ans就是枚举左端点是第几个块,然后每一次从这个块的左端点O(n)扫一遍,复杂度也是O(n√n). 查询的时候,整块的众数即其个数分别…
#include<cstdio> #include<algorithm> #include<cstring> #include<vector> using namespace std; #define fi first #define se second #define mp make_pair #define pb push_back typedef long long ll; typedef unsigned long long ull; typedef…