数论
Zeolim
这个作者很懒,什么都没留下…
展开
-
[质数筛法] [51nod]1181 质数中的质数(质数筛法)
是质数并且质数编号也是质数筛一下二分查初位暴力查下位#include <iostream>#include <algorithm>using namespace std;typedef long long ll;const int MAXN = 1e6 + 10;ll check[MAXN] = {0};ll prime[MAXN]...原创 2018-08-04 16:20:55 · 160 阅读 · 0 评论 -
[同余][前缀和]K倍区间
若一段连续子序列[l, r]和为k的倍数则必定有 sum[r] - sum[l - 1] % k == 0由同余定理sum[r] % k == sum[l - 1] % k由输入数据顺序则必定有已输入数据均在当前数据之前则可用brr数组记录当前数之前的所有模数 得解typedef long long ll;const int MAXN = 1e6 + 10;ll...原创 2019-03-06 15:40:12 · 246 阅读 · 0 评论 -
[模板] 快速乘 O(1)乘法 解决模运算下整数乘法64位变量溢出问题
快速乘原理同快速幂不做赘述ll qmul(ll a, ll b, ll mod) //快速乘{ ll ans = 0; while(b) { if(b & 1) ans = (ans + a) % mod; a = (a + a) % mod; b >>= 1; ...原创 2019-03-10 10:37:17 · 353 阅读 · 0 评论 -
[模板] 康托展开和逆展开
感谢ZLY告诉我这个知识点附上比较不错的模板https://www.cnblogs.com/Howe-Young/p/4348777.html例题:http://nyoj.top/problem/139(康托展开)http://nyoj.top/problem/143(康托逆展开)此题是理解康托展开非常好的例子就该题而言会不会康托展开都会想到用排列组合计算比该序列小的序...原创 2019-03-10 11:07:59 · 293 阅读 · 0 评论 -
[数论][模拟]51nod 1116 K进制下的大数
1116 K进制下的大数有一个字符串S,记录了一个大数,但不知这个大数是多少进制的,只知道这个数在K进制下是K - 1的倍数。现在由你来求出这个最小的进制K。例如:给出的数是A1A,有A则最少也是11进制,然后发现A1A在22进制下等于4872,4872 mod 21 = 0,并且22是最小的,因此输出k = 22(大数的表示中A对应10,Z对应35)。收起输入输入大数对应...原创 2019-03-27 13:47:00 · 257 阅读 · 0 评论 -
[组合数]lucas定理 排列组合取模
lucas: 计算 C 时 当 n, m范围大 mod范围小时可以将 n m 缩减至 mod 范围内计算预处理: 当 n m 范围小 mod 范围大时可以预处理阶乘逆元 O(1)计算const int FN = 1e5 + 10;const int MOD = 1e9 + 7;ll fac[FN] = {1, 1}, inv[FN] = {1,1}, f[FN] = {1,1};...原创 2019-05-05 10:50:23 · 606 阅读 · 0 评论 -
[GCD] 最小LCM
题目:给n个数, 你需要找两个数使得LCM最小, 将两个数的位置输出解题思路:题目时间给了四秒, 数据范围 1e7所以暴力是可以过的尝试使用枚举范围内所有 gcd 解决问题对于每个gcd x 有任意 gcd(n * x, m * x) = x用 O nsqrt(n)的筛法可以枚举出当前gcd = x下 最小的两个数组中含有的数字并计算结果且这两个数字必定是...原创 2019-05-05 10:48:49 · 260 阅读 · 0 评论 -
[模板] 区间筛素数
原理:一个数的倍数肯定不是素数若给定子区间[fst, lst]则必有区间内任意数最大的因子是sqrt(lst);因此只需要将2 - sqrt(lst)中的所有质数的倍数从区间[fst, lst]中划掉即可剩下的就是区间内的素数注意两个情况1. 第一次筛出的素数就在区间里 要特判2. 将区间[fst, lst]映射入[0, lst - fst]3.bitset优...原创 2019-04-25 19:23:13 · 368 阅读 · 0 评论 -
[枚举]LCM
题意:给a b 求 a 范围内最大的 x * y / gcd(x, y) = b;解题思路:一开始想的是枚举lcm的倍数到a * a, 然后在倍数里枚举因子判断是否合法直接枚举因子就可以了, 因子范围小 只用n方 枚举lcm的每个倍数都是n方以后做题尽量枚举小范围易得的部分代码:/* Zeolim - An AC a day keeps the bug away...原创 2019-05-14 11:41:38 · 469 阅读 · 0 评论 -
[概率dp] 流浪地球
现在告诉你每只救援队的目标发动机的编号以及这只救援队在规定时间内成功救援的概率,假如有至少k个行星发动机能够得到重启,则认为地球会被拯救。请你设计一个程序,帮助人类完成这个计算。第一行给出N,M,K。N代表人类派出的救援队总数,M代表被摧毁的行星发动机,K代表至少需要重启的行星发动机总数。(1<=N<=1e5,K<=M<=2000)接下来N行,每行给出ai,pi,...原创 2019-05-14 10:57:54 · 133 阅读 · 0 评论 -
[大数] 组合数
解题思路:结合图式求min(C(n, m), 1e18)如果m > n / 2 则有 m = n - m计算可得当m大于40的时候C必然大于1e18所有只用大数暴力求解m较小部分的情况,或者用C++int128边算边约分ps: py的整数除运算要用// 不然会变为浮点数mx = 1000000000000000000 def gcd(a,b): if a...原创 2019-10-07 22:04:55 · 558 阅读 · 0 评论 -
[数学] 小数点后第n位
一个分数 可能为无限循环小数和有限不循环小数定理: 有理数的简单运算不会出现无理数(无限不循环小数)求第n位小数时按照除法过程模拟即可求得答案1.余数乘十后除除数2.余数模除数goto 1;直到求得答案该算法时间复杂度O(n)则需引入对于循环小数的特殊处理则可用map容器记录<除数,位置>易得除数重复出现时即为循环节的开闭两端, 后部...原创 2019-02-25 11:53:32 · 896 阅读 · 0 评论 -
[唯一分解定理]感谢ZLY讲解
裸模板 求素因子乘积for(ll i = 2; i * i <= n; i++) { if(n % i == 0) { p *= i; while(n % i == 0) { n /= i; ...原创 2019-02-27 15:33:52 · 163 阅读 · 0 评论 -
[牛客寒假算法基础集训营6总结]
A.[简单数学思维递推]易得m题所组成所有分数集合中极小值m*6 极大值m*9, 因其子和差值均一, 则有若干组合组成连续闭区间[6*m, 9*m]易推得6数极小时应有其余三数组合极大 则有公式ans = max(-(n - m * ll(6)) + m, ll(0)) (未化简)---------------------------------------------...原创 2019-04-03 15:49:31 · 464 阅读 · 0 评论 -
[数论] [洛谷] P1403 [AHOI2005]约数研究
脸上笑嘻嘻心里MMP 素数因子只有1和本身 所以不用判线筛掉素数剩下暴力 是当然过不了的!!!!!大神解法:1到N中N个数有因子1N/2个数有因子2 N/3个数有因子3…………………然后O(n)解出答案 #include <iostream>using namespace std;typedef long...原创 2018-08-01 15:30:05 · 194 阅读 · 0 评论 -
[数论] [洛谷] P1017 负进制转换
负进制转换过程与正进制相同不断取模向下计算但是负进制在模的过程中会模出负数若为负数 该步需要特殊操作ans = mode[a - (a / b + 1) * b] + ans; a = a / b + 1;#include <iostream>using namespace std;typedef long long ll;...原创 2018-08-02 11:07:56 · 277 阅读 · 0 评论 -
[数学] [洛谷] P3910 纪念邮票
等差求和公式根据项数枚举head & taileps判整除//#pragma GCC optimize(2)#include <cstdio>#include <iostream>#include <cstdlib>#include <cmath>#include <cctype>#include &...原创 2018-08-16 07:20:20 · 272 阅读 · 0 评论 -
[线筛] [洛谷] P2640
//#pragma GCC optimize(2)#include <cstdio>#include <iostream>#include <cstdlib>#include <cmath>#include <cctype>#include <string>#include <cstring&g原创 2018-08-24 15:11:13 · 162 阅读 · 0 评论 -
[洛谷] P1722 矩阵Ⅱ
卡特兰数的应用//#pragma GCC optimize(2)#include <cstdio>#include <iostream>#include <cstdlib>#include <cmath>#include <cctype>#include <string>#include <cst...原创 2018-09-24 17:26:51 · 257 阅读 · 0 评论 -
卡特兰数的应用
卡特兰数 经典组合数可以解决非常多的问题https://blog.csdn.net/wu_tongtong/article/details/78161211 贴题1.求入栈出栈(洛谷矩阵Ⅱ)https://blog.csdn.net/Zeolim/article/details/82830675...转载 2018-09-24 17:30:48 · 128 阅读 · 0 评论 -
[洛谷] P1866 编号
简单递推 乘的时候要减去前面数字的个数 因为会重复//#pragma GCC optimize(2)#include <cstdio>#include <iostream>#include <cstdlib>#include <cmath>#include <cctype>#include <string>...原创 2018-09-25 16:31:35 · 392 阅读 · 0 评论 -
[模板] 常用数论 -> gcd、exgcd、乘法逆元、快速幂、快速乘、筛素数、快速求逆元、组合数
1.gcdll gcd(ll a, ll b){ return b ? gcd(b, a % b) : a;} 2.扩展gcd )extend great common divisor ll exgcd(ll l, ll r, ll &x, ll &y){ if(r == 0) { x = 1, y = 0; ...原创 2018-11-02 11:39:35 · 175 阅读 · 0 评论 -
Educational Codeforces Round 54 (Rated for Div. 2) B. Divisor Subtraction
观察易得1.质数无1和自身外的因子 且只有本身既质又因 按题意直接一步减自身至零2.若N是偶数则一直减2直到0所有质数都是奇数 奇数减奇数易得偶数 再回到条件2 一步到位所以操作次数不会太多线筛打表 结合1 2 暴力模拟即可 /* Zeolim - An AC a day keeps the bug away*///pragma GCC optimi...原创 2018-11-13 11:29:19 · 236 阅读 · 0 评论 -
[51nod] 1024 矩阵中不重复的元素
这个最暴力的想法就是暴力模拟算出详细值加set去重时间复杂度空间复杂度过大。所以需要对值进行映射,再用set去重映射方式很多,比较方便的是取对数logn(a ^ b) = b * logn(a)n可以取e->log()10->log10()2->log2()因为取了对数肯定会有误差所以需要重载一下EPS或者log2的精度比较高 可以...原创 2018-11-26 16:24:54 · 217 阅读 · 0 评论 -
[模板]BM求线性递推式
要求第n项时,直接linear_seq::(gao,n)即可,不放第0项的话,就是linear_seq::(gao,n-1)#include<bits/stdc++.h> using namespace std; typedef long long ll; const ll mod=1e9+7;const int N=1024; ll modpow(ll a...原创 2019-10-07 22:31:14 · 187 阅读 · 0 评论