
数论
月光下的魔术师
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
康拓展开
参考https://oi-wiki.org/math/cantor/https://zh.wikipedia.org/zh-hans/%E5%BA%B7%E6%89%98%E5%B1%95%E5%BC%80luogu5367题解代码(树状数组优化)#include <bits/stdc++.h>using namespace std;typedef l...原创 2019-09-05 09:00:13 · 146 阅读 · 0 评论 -
费马小定理与欧拉定理
费马小定理欧拉定理原创 2020-05-16 10:09:04 · 261 阅读 · 0 评论 -
HDU4497:数论GCD
题意:有多少对数满足题解:易知:,令含有,含有,含有那么a,b,c至少有一个为i1,一个为0。剩下的一个可以取遍[0,i1]。为了防止i1和0重合,可以先取[1,i1-1],在取两个i1或者两个0。共有6*(i1-1)+3 + 3= 6i1。代码:#include <bits/stdc++.h>using namespace std;int ...原创 2019-03-15 15:42:36 · 214 阅读 · 0 评论 -
原根学习篇
CaptionHDU2619求原根的数量代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;ll n;ll euler(ll n){ ll ans = n; for(int i=2;i*i<=n;i++){ if(n % i == 0){ ans = an...原创 2019-03-16 10:45:47 · 211 阅读 · 0 评论 -
HDU2683:完全数+组合数
HDU2683题解:两边约,得到,n为完全数。完全数:本身等于所有真因子的和。如果是素数,那么是完全数。枚举一下,发现完全数屈指可数。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;char t;ll x,y;vector<ll>v;ll p...原创 2019-03-16 11:18:21 · 257 阅读 · 0 评论 -
HDU3524:数论规律题+快速幂
HDU3524题解学会了打表找规律的技巧 2 2 3 4 7 12 23 44 87 172 343 684 1367 2732 5463 奇数项2 3 7 23 87 343 1367 5463 偶数项2 4 12 44 172 684 2732 奇数项的差为1 4 16 64 216 1024 4096 偶数项的差为2 8 32 128 512 2048 奇数项的通项公式:...原创 2019-03-16 12:45:16 · 252 阅读 · 0 评论 -
HDU2620:数论+分块
HDU2620题解Σ1<=i<=n(k mod i)k mod i = k - (k/i)*iΣ1<=i<=n(k mod i)= Σ1<=i<=n[k - (k/i)*i]= nk - Σ1<=i<=n (k/i)*i存在一段区间的k/i相同,只要求出数量。设k / i = k / j = d,i为区间的左端,j为区间的最...原创 2019-03-16 12:51:33 · 205 阅读 · 0 评论 -
HDU1005:循环节
HDU1005题解:一道循环规律题。既然是模7,那么有49种组合。在[3,49]内枚举,如果重现了f[1]和f[2],那么就是一个循环。代码:#include <bits/stdc++.h>using namespace std;int const MOD = 7;int const N = 60;int n,a,b;int f[N] = {0,1,1};...原创 2019-03-16 12:55:39 · 194 阅读 · 0 评论 -
置换群题集
POJ1026题意:对字符串按照置换操作k次,求最后的结果。题解求出每一个位置循环的长度,最后操作时,k对长度取模为k'。只需要变换k'次即可。代码#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <c...原创 2019-04-30 10:30:23 · 882 阅读 · 0 评论 -
威尔逊定理
威尔逊定理:若p为质数,则p|(p-1)!+1 亦:(p-1)!≡p-1≡-1(modp)HDU2973题解:若3k+7是质数,那么Sn = n(对应一项为1),否则Sn = 0#include <bits/stdc++.h>using namespace std;int const N = 3e6 + 10;int vis[N],prime[N],t...原创 2019-10-09 22:15:36 · 270 阅读 · 0 评论 -
HDU1852:快速幂
题意:求出2008^N所有因数对的和对k取余的结果M。再求2008^M对k取余的结果。题解:2008 = 2^3 * 251^1 2008^N = 2^(3N) * 251^N 因子和用排列组合计算为:∑2^i * 251^j (i from 0 to 3N, j from 0 to N); 先固定j,2^0 + 2^1 + …… + 2^3N = 2^(3N+1) - 1 =...原创 2019-03-15 14:21:18 · 168 阅读 · 0 评论 -
中国剩余定理模板+习题
除数互质void extgcd(int a,int b,int &x,int &y){ if(!b){x = 1,y = 0;} else{extgcd(b,a%b,y,x); y -= (a/b)*x;}}int inv(int a,int n) { int x,y; extgcd(a,n,x,y); ...原创 2019-03-07 19:03:11 · 8201 阅读 · 0 评论 -
错排
意义:n个不同的元素,每个元素都不在自己原来位置的排列方案数。递推式:D(n) = (n-1)(D(n-2) + D(n-1)),其中D(0) = 1,D(1) = 0, D(2) = 1。通项:D(n) = n! (1/0! - 1/1! + 1/2! - 1/3! - ..... + (-1)^n/n!)代码:void Init(){ d[0] = 1,d[1] = 0,d...原创 2019-02-22 17:38:58 · 388 阅读 · 0 评论 -
组合数的求法
组合数三种求法1、杨辉三角打表预处理(n,m<=2000) void Comb(){ for(int i=0;i<N;i++){ c[i][i] = c[i][0] = 1; for(int j=1;j<i;j++) c[i][j] = (c[i-1][j] + c[i-1][j-1]) % mod...原创 2019-02-22 17:49:04 · 472 阅读 · 0 评论 -
卡特兰数
https://blog.youkuaiyun.com/chlele0105/article/details/38739919卡特兰数:从0开始依次为1,1,2,5,14,42,132,429……通项:递推式:h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (n>=2)代码:void Catalan(){ f[0] = f[1] ...原创 2020-05-16 14:21:24 · 106 阅读 · 0 评论 -
CF446C:线段树+数论
CF446C题解:这真是一道好题。参考了下面大佬的博客,总结很棒。https://blog.youkuaiyun.com/icefox_zhx/article/details/79423177废话不多说,上我自己写的代码。还是比较规范,好看懂的。代码:/*公式Σai = an+2 - a2an+2 = Fn * a1 + Fn+1 * a2(n表示长度)an = fn-2 * a...原创 2019-02-17 21:26:49 · 383 阅读 · 0 评论 -
素数筛选
朴素埃式素数筛法枚举≤n的每一个数x,把x倍数都筛选掉。 int vis[N]; // 素数标记,0为素数,1为合数memset(vis, 0, sizeof(vis));for(int i = 2; i <= n; i++) { // 枚举基 for(int j = i*2; j <= n; j += i) { // 枚举倍数 vis[j] =...原创 2019-02-22 19:32:49 · 217 阅读 · 0 评论 -
HDU2879:积性函数
HDU2879题解:参考https://blog.youkuaiyun.com/codeswarrior/article/details/81433946关于积性函数积性函数定义:对于正整数n的一个算术函数 f(n),若f(1)=1,且当a,b互质时f(ab)=f(a)f(b),在数论上就称它为积性函数。若对于某积性函数 f(n) ,就算a, b不互质,也有f(ab)=f(a)f(b),则...原创 2019-03-08 14:59:21 · 435 阅读 · 0 评论 -
欧拉函数的证明与实现
HDU2824题解:这一道题内存卡很严,打表是一门技术活。最后加一行phi[i] += phi[i-1]即可。因为后面i已经用不到了。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;int const N = 3000000 + 10;int a,b;ll phi[N];...原创 2019-03-08 17:42:46 · 217 阅读 · 0 评论 -
HDU2462:
HDU2462题解:找一个最小的l的倍数,满足每一个数都是8,输出数的长度。 设8 * (10^n - 1) / 9 = L* p 10^n - 1 = p * L * 9 / 8 = p' * L* 9 / gcd(8,9L) 10^n1 (mod 9*L / gcd(8,9L)) 根据欧拉定理,gcd(10,9L / gcd(8,9L)) == 1才有解。然后在ph...原创 2019-03-08 22:23:04 · 177 阅读 · 0 评论 -
扩展欧几里得算法
扩展欧几里得算法:ax + by = gcd(a,b) 求解预备知识a≠0,b≠0,gcd(a,b)是ax+by的线性组合的最小正元素。证明设gcd(a,b) = d。 gcd(b,a mod b) = d'bx' + (a mod b)y' = d'令a / b = k(向下取整),则d' = bx' + (a - kb)y' = ay' + b(x'-ky')。 gcd(a,...原创 2020-05-16 10:42:25 · 123 阅读 · 0 评论 -
HDU2837:指数循环节
HDU2837题解:看成是一道欧拉降幂公式的模板题吧。快速幂模板要修改一下,其它的都一样。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;ll n,m;ll euler(ll n){ ll ans = n; for(int i=2;i*i<=n;i++){ i...原创 2019-03-10 12:35:31 · 182 阅读 · 0 评论 -
HDU2104:GCD
HDU2104题解:(s+ km) % n 能够取到[0,n-1]中的所有的数 k = 0,1……证明:当且仅当n和m互质时,才能取到[0,n-1]之间所有的数。首先要明白一个简单的结论:k在[0,n-1]可以取遍(s+ km) % n 能取到的所有值。因为当k取n时,(s+ 0*m) % n =(s+ n * m) % n,又一个循环开始。 设(s + ki * m) %...原创 2019-03-14 18:39:29 · 192 阅读 · 0 评论 -
Lusca定理
Lucas定理:公式:C(n,m)%p=C(n/p,m/p)*C(n%p,m%p)%p 适用范围:n和m很大(1e18数量级),mod很小(1e6数量级) 对于上式:C(n%p,m%p)可直接用逆元求组合数方法求,C(n/p,m/p)继续用lucas定理。 代码: ll Lucas(int n,int m){ if(n < m) return 0; else if(m ==...原创 2019-02-22 17:33:27 · 310 阅读 · 0 评论