数论
兜率工
XJTU 硕士研究生在读
展开
-
关于欧拉函数的一些基本理论
欧拉函数的基本性质:① N是不为0的整数。φ(1)=1(唯一和1互质的数就是1本身)② 除了N=2,φ(N)都是偶数.③ 小于N且与N互质的所有数的和是φ(n)*n/2。④ 欧拉函数是积性函数——若m,n互质,φ(m*n)=φ(m)*φ(n)。⑤ 当N为奇数时,φ(2*N)=φ(N)⑥ 若N是质数p的k次幂,φ(N)=p^k-p^(k-1)=(p-1)p^(k-1),因为除...原创 2018-06-04 20:35:48 · 777 阅读 · 0 评论 -
积性函数的基本理论
积性函数:对于任意互质的整数a和b有性质f(ab)=f(a)f(b)的数论函数。 完全积性函数:对于任意整数a和b有性质f(ab)=f(a)f(b)的数论函数。 常用积性函数举例φ(n) -欧拉函数 μ(n) -莫比乌斯函数,关于非平方数的质因子数目 gcd(n,k) -最大公因子,当k固定的情况 d(n) -n的正因子数目 σ(n) -n的所有正因子之...原创 2018-06-06 16:20:09 · 2538 阅读 · 0 评论 -
莫比乌斯函数跟莫比乌斯反演的基本理论
摘自百度百科,其中的某些证明略原创 2018-06-07 15:35:53 · 212 阅读 · 0 评论 -
容斥定理以及其应用
下面仅仅是我在学习ACM中所遇到的应用场景,如果以后有遇到再另行补充 举个栗子: 以51nod 上的一道题说一下,题目意思是求解10以内不能被2 3 5 7整除的数的个数。 利用容斥定理,计算出能被2 3 5 7 整除的数的个数即: ans=n/2+n/3+n/5+n/7−n/6−n/10−n/14−n/15−n/21−n/35+n/30+n/42+n/70+n/105−...原创 2018-06-07 21:09:13 · 401 阅读 · 0 评论 -
HDU 1695(欧拉函数+容斥)
#include<iostream>#include<cstdio>#include<cstring&am原创 2018-06-08 00:23:47 · 169 阅读 · 0 评论 -
n的阶乘在m进制下末尾有多少零
这个题的m最大值是100,如果还能更大的话将prime数组中的素数取到比最大值小的素数即可。#include<bits/stdc++.h>using namespace std;typedef long long ll;ll prime[] = {0, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47,...原创 2018-07-23 14:44:31 · 3476 阅读 · 0 评论 -
Uestc1063 易位法字符串加密
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<map>#include<vector>#include<cmath>#inclu原创 2018-07-14 14:49:57 · 752 阅读 · 0 评论 -
POJ 1026 (分组密码与流密码)
因为交换的次数过多,所以必须找到循环节,进行取余,从而方便计算。#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<map>#include<vector>原创 2018-07-14 17:23:09 · 314 阅读 · 0 评论 -
POJ 1107 分组密码与流密码
主要借助了p数组来储存位置 其实只需要分三类即可,如果下标对应的是第一类,就在第一类中寻找,依次类推。#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<map>#in...原创 2018-07-14 18:23:41 · 210 阅读 · 0 评论 -
费马小定理在ACM中的应用
费马小定理 假如p是素数,且(a,p)=1(a,p)=1(a,p)=1,那么a^(p-1)≡1(mod p)① 判断素数,对于大素数的判定,Miller-Rabin 素数判定 ②求解逆元 ,设a模p的逆元为x,则a*x≡1(mod p) ,(a,p)=1;由费马小定理可以知道x=a^(p-2) ③对于计算ab(modp)ab(modp)a^b(mod p) 可简化 &nb...原创 2018-06-06 15:58:32 · 1933 阅读 · 1 评论 -
POJ 2480 (积性函数的应用)
第七行的解释写的不好,看下面我有重新写。 令n/i=mn/i=mn/i=m,可以得到所有小于i并且跟i互素的数乘以m均与n的gcd计算结果为m#include <iostream>#include <cstring>#include <cstdio>using namespace std;typedef long long ll;in...原创 2018-06-06 15:27:35 · 264 阅读 · 1 评论 -
POJ 1845(求因子的和)
#include &amp;lt;iostream&amp;gt;#include &amp;lt;cstring&amp;gt;#include &amp;lt;cstdio&amp;gt;using namespace std;typedef long long ll;const int N = 10005;const int MOD = 9901;int p[N/2];bool prim原创 2018-06-06 01:58:56 · 183 阅读 · 0 评论 -
关于原根的一些基本理论
①一个数m如果有原根,则其原根个数为phi(phi(m))。特别地,对素数有phi(p)=p-1。 ②如果正整数(a,m) = 1和正整数 d 满足a^d≡1(mod m),则 d 整除 φ(m)。原创 2018-06-04 21:39:51 · 586 阅读 · 0 评论 -
卢卡斯定理(十分钟带你看懂)
在开始之前我们先介绍3个定理:1.乘法逆元如果ax≡1 (mod p),且gcd(a,p)=1(a与p互质),则称a关于模p的乘法逆元为x。2.费马小定理: 3.扩展欧几里得已知整数a、b,扩展欧几里得算法可以在求得a、b的最大公约数的同时,能找到整数x、y(其中一个很可能是负数),使它们满足贝祖等式ax + by = gcd(a, b)。好了,在明白上面的定理后我们开始...原创 2018-05-28 22:26:33 · 32690 阅读 · 17 评论 -
POJ 3358 POJ 3696 (同余方程+欧拉函数+原根)
POJ 3358 题解 比如1/10,用乘二法,2/10,4/10,8/10,6/10,2/10 其中1*2^1=1*2^5(mod10) 用p代表分子,q代表分母,i代表一个位置,j代表一个位置,比如在1/10中,i为1,j为5,一下的p和q均为最简式 那么我们要求的就是 p*2^i=p*2^j(modq) 化简得2^(j-i)=1(modq...原创 2018-06-05 09:03:35 · 240 阅读 · 0 评论 -
拓展卢卡斯定理
再看下面讲解之前,请大家熟悉一下乘法逆元,中国剩余定理,拓展gcd,费马小定理 关于拓展卢卡斯,也就是卢卡斯的升级版,卢卡斯限定只能取余一个素数,而拓展卢卡斯则没有限定 其求解方法如下: 若不是素数,将p分解质因数,将C(n,m)分别按照Lucas定理中的方法求对p的质因数的模,然后用中国剩余定理合并。比如计算C(10,3)%14。C(10,3)=120,14有两个质因数2和7,120...原创 2018-05-29 13:21:23 · 3624 阅读 · 2 评论 -
求一个数的因子数以及因子和
int count(int n){ int s=1; for(int i=2;i*i&amp;amp;lt;=n;i++){ if(n%i==0){ int a=0; while(n%i==0){ n/=i; a++; } ...原创 2018-06-05 16:26:56 · 11597 阅读 · 1 评论 -
乘法逆元及其解法
乘法逆元 如果ax≡1 (mod p),且gcd(a,p)=1(a与p互质),则称a关于模p的乘法逆元为x。1.用扩展欧几里得求得逆元 我们都知道模就是余数,比如12%5=12-5*2=2,18%4=18-4*4=2。(/是程序运算中的除) 那么ax≡1 (mod p)即ax-yp=1.把y写成+的形式就是ax+py=1,为方便理解下面我们把p写成b就是ax+by=1。就表示...原创 2018-05-29 20:46:38 · 4921 阅读 · 0 评论 -
快速计算n!阶乘中素因子的个数
我们来一个样例说明一下:1 2 3 4 5 6 7 8 我们求得在8!中2的个数 1 1 1 1 首先我们先计算出2的倍数的个数:8/2=4 1 1 其次我们计算出4的倍数的个数: 8/4=2(上面一个式子求出了第一层,现在求第二层) ...原创 2018-06-05 20:21:27 · 2878 阅读 · 0 评论 -
POJ 2992(求C(n,k)的约数个数)
首先肯定不可能一个一个进行计算 采用数论中的相关知识可以得到求解本题的两个公式, 对于任于的数p=n1p1∗n2p2∗n3p3.....p=n1p1∗n2p2∗n3p3.....p = n1 ^p1 * n2 ^ p2 * n3 ^ p3 ..... p的因数个数为(1+p1)∗(1+p2)∗(1+p3)....(1+p1)∗(1+p2)∗(1+p3)....(1 + p1) * (1 +...原创 2018-06-05 21:16:22 · 388 阅读 · 0 评论 -
POJ 2159 分组密码与流密码
因为既要替换又要排列,而方法却有很多种,无法明确确定。但是知道明文中一些相同字符出现的次数跟密文出现的次数相同。所以可以根据这一点来进行计算。#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#inc...原创 2018-07-14 20:03:11 · 410 阅读 · 0 评论 -
N个点可以将圆划分成几个区域
B站上讲的超好的视频欧拉示性数公式:V:顶点数;E:边数;F:被划分区域数;#include<bits/stdc++.h>using namespace std;long long C(int n, int m){ long long s=1; if(n < m) s=0; else if (n == m...原创 2018-07-23 09:02:16 · 5133 阅读 · 0 评论 -
快速计算1-n中所有数的素因子
const int maxn=1e5+10;int prime[maxn],cnt;bool vis[maxn];vector<int> f[maxn];void get_prime_fac(){ for(int i=2;i<maxn;i++){ if(!vis[i]){ prime[cnt++]=i; ...原创 2018-10-12 10:34:43 · 919 阅读 · 0 评论 -
求1~n中每个数的质因子
#include<bits/stdc++.h>using namespace std;vector<int> a[1000];bool vis[1000];void init(){ for(int i=2;i<100;i++){ if(!vis[i]){ a[i].push_back(i); ...原创 2018-09-28 07:26:03 · 2295 阅读 · 0 评论 -
HDU - 5468 Puzzled Elena (容斥/莫比乌斯)
做了好几个容斥了,一直找不到feel,这个做完在现在有一点感觉了。虽然刚开始也不会。但就是发现感觉不一样了。首先,不考虑树的关系,单纯给出一个m,还有一个集合(里面数字任意),求集合里面跟m互质的数的个数。这就是典型的容斥题。那么现在要求得使顶点跟子节点的互质关系,那么原理还是有容斥喽,还是回到一开始那个问题,如何计算跟m互质的数的个数,做法是将m进行质因子分解,然后计算集合中有多少能被m...原创 2018-10-12 00:42:48 · 190 阅读 · 0 评论 -
快速幂&快速乘(模板)
// 快速模幂计算函数 int powermod(long long a, int n, int m) { long long res = 1; while(n) { if(n &amp;amp; 1) { // n % 2 == 1 res *= a; res %= m; ...原创 2018-02-28 09:15:54 · 240 阅读 · 0 评论 -
HDU - 5768(中国剩余定理+容斥定理)
题意:小明认为能被7整除的数能给他带来好运,但是如果这些数存在x%pi=ai(1<=i<=n)的话,它反而会给小明带来坏运。问[x,y]区间里有多少个数能给小明带来好运?分析:明显的容斥题,但在容斥过程中得算x%pi=ai(1<=i<=n)中的x,明显是中国剩余定理。那么在计算过程中,将能被7整除看成%7==0,具体思想看代码。#include<...原创 2018-10-13 15:56:30 · 248 阅读 · 0 评论 -
ACM-ICPC 2018 焦作网络赛 G. Give Candies(费马小定理降幂)
费马小定理:计算,当n很大时可以写成:那么根据费马小定理就能得到 #include<bits/stdc++.h>using namespace std;typedef long long ll;const ll mod=1e9+7;ll quick_pow(ll a,ll b){ ll ans=1; while(b){ ...原创 2018-09-29 00:13:57 · 181 阅读 · 0 评论 -
CodeForces - 851D Arpa and a list of numbers (数学+思维)
题意:给定n个数字,要求操作后n个数字的gcd不为1,并且操作的代价最小,每个数字有两种操作,删除的代价为x,数字加1的代价为y。分析:最暴力的想法当然是枚举gcd(听说可以过)但是所有数的gcd当然是一个素数的倍数,那么我们枚举素数就可以了。若当前数字是 a,设 k = a%p 那么可以知道如果那么加上1如果那么删除该数so:删除的代价为:该区间在数组中的数字...原创 2019-04-08 20:31:02 · 209 阅读 · 0 评论 -
HDU - 3092 Least common multiple (数论+背包)
题意:求把一个整数S拆成若干数a_i的和, 并且这些数(a_i)的最小公倍数最大。输出最小公倍数对M取模。分析:容易想到质数肯定是跟答案有关,那么肯定是01背包容量为S,使得总价值最大,总价值即为lcm,但是可能一个素数取多次,例如9,4*5是最优解,但是只可能取素数的幂次,因为这样才能保证集合的数都互质,取倍数不能保证这一点,那么在01背包的基础上进行操作就可以了,枚举每个质数的时候...原创 2019-04-30 09:30:10 · 302 阅读 · 4 评论 -
ACM-ICPC 2018 沈阳网络赛 C Convex Hull (莫比乌斯+容斥)
long long 爆的我心痛,现在编译器都支持128位的了。。。神奇,电脑编译器都过不了(老了),交上去ac了,就是复杂度还有点高,应该不是正解,不过又get到了新知识,不过也有的巨佬说是余数太大的缘故,所以中间采用 int128参考博文:https://blog.csdn.net/qkoqhh/article/details/82532516#commentsedit很菜,容斥...原创 2018-09-27 15:39:32 · 568 阅读 · 0 评论 -
2018 ACM-ICPC 南京网络赛 J-sum (莫比乌斯函数+整除分块)
题意:f(x)表示x分解为a*b且a b中均不含平方因子的方案数目(ab ba算两种),求f(1)+......+f(n)思路:可以发现这个跟莫比乌斯函数一样,不知道的自行百度。那么题意可以简化为:这不就很简单啦嘛,直接整除分块搞一下就OK的啦。#include<bits/stdc++.h>using namespace std;typedef l...原创 2018-09-25 22:38:30 · 224 阅读 · 0 评论 -
整除分块
转自:http://www.cnblogs.com/peng-ym/p/8661118.html前言最近在学习莫比乌斯反演,发现了一个基本上所有的有关莫比乌斯反演的题目,都涉及到一个小的知识点: 整除分块。 所以,在学习莫比乌斯反演之前学会整除分块是很有必要的。 那么,我就来介绍一下整除分块这一内容整除分块可以用到整除分块的形式,大致是这样的: ...转载 2018-09-20 01:38:19 · 934 阅读 · 0 评论 -
HDU 5451 Best Solver
若要是直接计算(5+sqrt(24))^n当然不好计算,但可以知道的是(5+sqrt(24))^n+(5-sqrt(24))^n是整数,高中学过的方法化简开即可发现。而且5-sqrt(24)是个小数,所以(5+sqrt(24))^n+(5-sqrt(24))^n再减去1就是要求的答案。然而,由广义斐波那契可得到:所有的F[n]=p*F[n-1]+q*F[n-2]形式都能与A*x^n+B*y^n...原创 2018-08-14 15:05:43 · 156 阅读 · 0 评论 -
HDU 6198 Number Number Number
打表代码:#include<bits/stdc++.h>int dp[200][2000];int fib[1100];int main(){ fib[0]=0; fib[1]=1; for(int i=2;i<=40;i++){ fib[i]=fib[i-1]+fib[i-2]; } dp[0][0]=1;...原创 2018-08-13 11:18:55 · 102 阅读 · 0 评论 -
大整数取模
scanf("%s%d",n,&m);int len=strlen(n);int ans=0;for(int i=0;i<len;i++){ ans=(int)(((long long)ans*10+n[i]-'0')%m);}printf("%d\n",ans);原创 2018-08-25 08:55:36 · 1301 阅读 · 0 评论 -
斐波那契通项公式
参考信息学奥赛之数学一本通书上证明写的很好,我这不再赘述,想要电子版的留言联系方式。斐波那契数列:0 1 1 2 3 5 8...斐波那契数列通项公式:普通递归关系:考虑以下定义在非负整数n上的递归关系: 其中a、b是满足以下两个条件的常数: 可得:其中: (m一般取加号,k一般取减号)。PS:不过一般这种题矩阵快速幂更好用。...原创 2018-09-05 22:24:17 · 4138 阅读 · 2 评论 -
洛谷 P2544 斐波那契之数字迷阵
题目链接这个题得明白两点:1.这种斐波那契数字迷阵第一列的通项:,其中 (trunc是向下取整的意思)2.知道第一项后,第二项怎么计算 ; 表示第 行第 个元素。然后,算出来前两项,套用矩阵快速幂,即可求得最后答案。#include<cstdio>#include<cstring>#include<cmath>typ...原创 2018-09-05 22:34:35 · 284 阅读 · 0 评论 -
卡特兰数
先放一张图 在ACM中的例子有:1.二叉树的计数2.AB排列问题(n个A和n个B排成一排,从第一个位置开始到任何位置,B的个数不能超过A的个数)3.乘法加括号(有多少种不同的运算顺序)4.欧拉多边形分割问题(凸n边形用n-3条不相交的对角线分成n-2个互相没有重叠的三角形)5.在圆上选择2n个点,将这些点成对链接起来使得所得到的n条线段不相交,一共有多少种方法6.一...原创 2018-09-06 21:47:11 · 194 阅读 · 0 评论 -
洛谷P2257 莫比乌斯反演
#include<bits/stdc++.h>using namespace std;const int maxn=1e7+10;typedef long long ll;bool vis[maxn];int mu[maxn];ll sum[maxn];int prime[maxn];int g[maxn];void get_mu(in...原创 2018-09-24 09:24:28 · 287 阅读 · 0 评论