题目链接
思路
用min_25筛的思路,也就是埃筛的思想,维护一个前缀和和一个个数数组,
然后枚举质数来判断合数的贡献。
例如 N=17时,枚举质数2,然后分块的思想,找出17/2所在的块的大小,也就是8
然后2~ 8这个区间乘上2的话也在1~17之中,所以贡献就多了8-(2-1)*2,然后不断枚举下去。
合数部分就解决了,然后我们解决质数部分,就用min_25筛就好了。
最后的g[id]表示区间素数和,然后ans就是我们计算的合数部分了
你最愿意做的哪件事,才是你的天赋所在
这道题就是把矩阵补全之后,然后求伴随矩阵。
因为把每一列去掉,其实就是补全后的代数余子式。求伴随矩阵的话我们用高斯消元求逆矩阵然后乘上行列式的值即可
然后我们用高斯消元求出逆矩阵即可
1 | #include<bits/stdc++.h> |
这题目就是求a,b公约数的个数中互质的个数。
我们对a,b中做质因数分解,然后查找有多少个相同的质因数,就最多可以选几个了。
为什么这样是对的?因为选择的每个数都可以分解成质因数,要求他们互质的话也就是要求他们没有相同的质因子。然后我们就贪心的选择质数就好了。
1 | clude<bits/stdc++.h> |
一道Min25筛的很基础的入门题。就是对g函数求和的操作。先对n分块,然后从小到达筛素数,然后从大到小对g进行处理,
因为这样就能滚动处理g数组,少了一维空间
1 | #include<bits/stdc++.h> |
这道题看清楚了思路很简单,我们对一个人单独考虑,假设现在我全部人都选择进队,然后对每个人单独考虑,如果队中有比我更强的,那么我就不用出队,否则,我就需要出队。
所以每次用取和符号判断队伍中是否存在比我更强的人
1 | #include<bits/stdc++.h> |
很水的题,排个序就好
1 | #include<bits/stdc++.h> |