合集-数论
摘要:原题链接 题解 1.异或是01变1,11变0,或是01变1,11变1,所以或的越多(即分的组越多),结果越大 2.我们令x=x+1,这样小于等于x的 问题就变成了小于x 的问题,这里我们采用逼近答案的方法。 3.对于某一位而言,如果有奇数个元素在这一位上是1,那么不管怎么分,最后的结果肯定是1,如果
阅读全文
摘要:原题链接 题解 然后就变成了求解同余方程 code #define ll long long #include<bits/stdc++.h> const ll mod=19260817; using namespace std; ll x,y; ll c; ll a,b; inline void r
阅读全文
摘要:原题链接 题解 一个细节坑我好久 code #include<bits/stdc++.h> #define ll long long using namespace std; ll f[15][15]={0};//从最高位第i位数字为j时的数字里有多少windy数 ll solve(ll now)
阅读全文
摘要:原题链接 题解 分解n的质因子,如果为奇数就补一个 由于大于 的质因子最多不超过一个,所以我们筛小于 的质数 code #include<bits/stdc++.h> #define ll long long using namespace std; vec
阅读全文
摘要:原题链接 题解 发现一串数字的lcm一定大于等于这一串数字的最大值,所以如果整个数组的lcm大于 ,直接输出n 否则,注意这里的思维,否则,剩余数字组成的lcm一定小于等于 且是 的因子 code #include<bits/s
阅读全文
摘要:原题链接 题解 先不考虑k的限制,而是考虑对于任意一个数,存不存在一个k使得题目所给等式成立 当 没有进位时,等式一定成立 (赛时也许想到这就够了) 假如有进位呢? 对于任何一个位数大于1的数,必有 (想想十进制是怎么表示数的) 而对于位数为1的数,有
阅读全文
摘要:原题链接 题解 1.坐标i,j中,一定有一个值为n-1 2.所以另外一个数就是n-1在二进制表示下0的位置变成1,1的位置变成0的数 3.如何找到最大值?答:自己和自己或找出最大的 4.如何找到另外一个数?答:找出和最大值或最大的,再找出这些数中最小的 code #include<bits/stdc
阅读全文
摘要:原题链接 题解 1.每一个1对答案的贡献为其前面0的个数 2.不难想到二进制,即每遇到 就考虑要不要放一个1 3.但是这样长度会超标,所以我们将较大的 表示成 ,其中 ,即在 0 的个数为 \(2^{k
阅读全文
摘要:原题链接 题解 由于答案之和最小的两个数有关,所以我们可以把数组排序 然后遍历数组,对于第 个数,遍历其所有因子 ,统计 前面有多少数与 的 实施 预处理所有数的因子,然后从大到小遍历,时间复杂度
阅读全文
摘要:原题链接 题解 易得当区间异或和不为完全平方数的时候合法 朴素做法: 遍历所有区间,看看异或和是不是完全平方数 优化: 异或是可以交换运算顺序的,如果区间 异或和为完全平方数,那么代表 其中k为完全平方数 也就是说,\(
阅读全文
摘要:原题链接 题解 多想几种暴力 1.遍历所有数对: 2.求有多少数对其乘积为平方数 求有多少平方数能被数对乘积: 3.如果两个数的乘积为平方数,代表他们的质因数,要么都是奇数,要么都是偶数 : 4.如果 \(a \times
阅读全文