满足GL的组合一定包含GL每个质因数最大次幂个最小次幂,并且能做限制这些数不会超过600个 然后质因数最多8个,所以可以状压f[s1][s2]为选s1集合满足最大限制选s2集合满足最小限制 dfs一下预处理出质因数只选一个质因数的初始状态 然后dp,做一个前缀一个后缀,设f[i][j]为前i个质因数选成集合j的方案数,g[i][j]为后i个质因数选成集合j的方案数,然后转移很好想,就是f[i][va[i]|j]+=f[i-1][j]*rs[i],其中rs是满足第i个质因数的方案数,g同理 然后我…
题面 https://www.lydsy.com/JudgeOnline/problem.php?id=5019 题解 如果L不是G的倍数 答案为0 下面考虑G|L的情况 将G,L质因数分解 设$L=p_1^{l_1} \times p_2^{l_2} \times ... \times p_t^{l_t}$ 那么G的所有质因数肯定在$p_1 ~ p_t$之间 所以我们可以把G也写成 $G=p_1^{g_1} \times p_2^{g_2} \times ... \times p_t^{g_t…
[BZOJ5019][SNOI2017]遗失的答案(FWT,动态规划) 题面 BZOJ 题解 发现\(10^8\)最多分解为不超过\(8\)个本质不同质数的乘积. 而\(gcd\)和\(lcm\)分别就是每个质因子的最大次幂和最小次幂的乘积. 那么考虑一个状压\(dp\),设\(f[S1][S2]\)表示最小/最大次幂是否被取到的方案数. 而能够被统计入答案的数一定是在\(gcd\)和\(lcm\)之间的数,并且是\(gcd\)的倍数,\(lcm\)的因数. 直接爆搜,这样的数不会太多.然后可以…
题目描述 小皮球在计算出答案之后,买了一堆皮肤,他心里很开心,但是一不小心,就忘记自己买了哪些皮肤了.==|||万 幸的是,他还记得他把所有皮肤按照1-N来编号,他买来的那些皮肤的编号(他至少买了一款皮肤),最大公约数 是G,最小公倍数是L.现在,有Q组询问,每组询问输入一个数字X,请你告诉小皮球,有多少种合法的购买方案中 ,购买了皮肤X?因为答案太大了,所以你只需要输出答案mod1000000007即可. 输入 第一行,三个数字N,G,L,如题意所示. 第二行,一个数字Q,表示询问个数. 第三…
正解:数论$dp$ 解题报告: 传送门$QwQ$ 考虑先质因数分解.所以$G$就相当于所有系数取$min$,$L$就相当于所有系数取$max$ 这时候考虑,因为数据范围是$1e8$,$1e8$内最多有8个不同质因子,所以考虑状压记录每个质因子的系数是否取到了上界&下界. 状压$dp$就完事了. $dbq$写得有点简陋,仔细港下趴$kk$ 首先经过前面一番操作,题目已经变成了,给定一些集合,求或起来为全集的方案数$QwQ$ 考虑这个强制选$x$怎么搞鸭,先设$st$表示$x$的状态,$tot$表示…
Description 小皮球在计算出答案之后,买了一堆皮肤,他心里很开心,但是一不小心,就忘记自己买了哪些皮肤了.==|||万 幸的是,他还记得他把所有皮肤按照1-N来编号,他买来的那些皮肤的编号(他至少买了一款皮肤),最大公约数 是G,最小公倍数是L.现在,有Q组询问,每组询问输入一个数字X,请你告诉小皮球,有多少种合法的购买方案中 ,购买了皮肤X?因为答案太大了,所以你只需要输出答案mod1000000007即可. Input 第一行,三个数字N,G,L,如题意所示. 第二行,一个数字Q,…
题目 首先\(G,L\)肯定会满足\(G|L\),否则直接全部输出\(0\) 之后我们考虑一下能用到的质因数最多只有\(8\)个 同时我们能选择的数\(x\)肯定是\(L\)的约数,还得是\(G\)的倍数,还不能超过\(N\),感性理解一下这样的\(x\)显然不多,我们直接\(dfs\)出来 对于每一个数我们把它压成一个\(2\times 8\)的二进制数,第\(2i-1,2i\)位分别表示第\(i\)个质因子是否到上界/下界,我们直接一个\(dp[i][j]\)表示前\(i\)个数选择状态为\…
显然存在方案的数一定是L的因数,考虑对其因子预处理答案,O(1)回答. 考虑每个质因子,设其在g中有x个,l中有y个,则要求所有选中的数该质因子个数都在[x,y]中,且存在数的质因子个数为x.y.对于后一个限制,显然可以简单地容斥,即[x,y]-[x+1,y]-[x,y-1]+[x+1,y-1],枚举这个至多是48的,这个取最大值时因子个数是28.暴力枚举数数即可.复杂度总之O(能过). #include<iostream> #include<cstdio> #include<…
传送门 数字最小公倍数为\(L\)的充分条件是所有数都是\(L\)的约数,而\(10^8\)内最多约数的数的约数也只有\(768\)个.所以我们先暴力找到所有满足是\(L\)的约数.\(G\)的倍数的数. 接下来注意到题目的\(\gcd\)和\(lcm\)的限制等价于对于每一个质数限制所有数在该质数指数上的\(\min\)和\(\max\).在\(10^8\)内质数数量最多的数只有\(8\)个质数,所以我们对于第一步中求出的数用一个二进制数记录下它每一个质数的指数是否等于限制的\(\min\)和…
luogu 首先gcd为\(G\),lcm为\(L\),有可能出现的数(指同时是\(G\)的因数以及是\(L\)的倍数)可以发现只有几百个.如果选出的数要能取到gcd,那么对于每种质因子,都要有一个数的这种质因子出现次数取到最小值,要取到lcm,也就是每种质因子都有数达到其出现次数的最大值.那我们给每个合法的数一个二进制权值,表示这个数的某种质因子出现次数是否为这种质因子出现次数最小值/最大值 那么现在问题就是选出若干个数,使得权值或起来为全集的方案,设\(f_i\)为或起来为\(i\)的答案.…