数论
文章平均质量分 75
一只xio蓝狗
蓝狗一只
展开
-
欧拉函数
欧拉函数:φ(n)表示从1~n-1中有多少个数与n互素, φ(1) = 1。互素的意思即为两个数只有公因数1。我们首先应该要知道欧拉函数的通项公式:φ(n)=n*(1-1/p1)(1-1/p2)(1-1/p3)*(1-1/p4)……(1-1/pn),其中pi为n的质因数下面介绍三种方法求欧拉函数方法1:求单个数的欧拉函数int euler(int n) { int ans=n; for(int i=2;i*i<=n;i++){ if(n%i==原创 2020-10-14 01:18:28 · 1911 阅读 · 1 评论 -
哥德巴赫猜想
哥德巴赫猜想哥德巴赫猜想:即任一大于2的偶数都可写成两个质数之和。下有模板题:Description验证哥德巴赫猜想:任何一个大于6的偶数均可表示为两个素数之和。例如6=3+3, 8=3+5,…18=5+13(若某一偶数可分成多组素数和,只取前一个加数最小的那一个组合)。要求将6-99之间的偶数都表示成两个素数之和,输出时每行输出5组。Input无Output输出格式:每个整数占两位,且左对齐,两个式子间空格隔开。Sample InputSample Output6 =3 +3 8 =原创 2020-10-06 00:38:02 · 986 阅读 · 0 评论 -
费马小定理
费马小定理内容:若存在整数 a , p 且gcd(a,p)=1,即二者互为质数,则有a^(p-1)≡ 1(mod p)。(这里的 ≡ 指的是恒等于,a^(p-1)≡ 1(mod p)是指a的p-1次幂取模与1取模恒等)(不理解的话请留言)证明:这里证明较为复杂需要先引出两个定理:引理一:若a,b,c为任意3个整数,m为正整数,且gcd(m,c)=1,则当a·c≡b·c(mod m)时,有a≡b(mod m)。 证明:a·c≡b·c(mod m)可得ac–bc≡0(mod m)可得(a-b)·原创 2020-10-05 00:52:15 · 531 阅读 · 1 评论 -
中国剩余定理(SCAU 1077 韩信点兵)
看了很多博客始终没弄明白中国剩余定理到底是怎么算出来的,看孙子的话完全是一脸懵逼啊……还好有这个博客大神的博客Orz,真的讲的特别清晰。点赞点赞~下面会用到的数学公式:①如果a%b=c,那么如果x%b=c/2,此时x=a/2;也就是说除数相等时,被除数和余数是成比例的。②如果a%b=c,那么 (a + k*b)%b=c,其中k为整数问题引入: 在《孙子算经》中有这样一个问题:“今有物不知其数,三三数之剩二(除以3余2),五五数之剩三(除以5余3),七七数之剩二(除以7余2),问物几何?”这个问题原创 2020-10-05 14:06:00 · 2344 阅读 · 2 评论 -
逆元
1. 乘法逆元如果a·x≡1(mod p)且gcd(a,p)=1(即a,p互质),那么x为模p意义下的乘法逆元。一个数有逆元的充分必要条件是gcd(a,p)=1,此时逆元唯一存在。2.拓展欧几里得求逆元a·x≡1(mod p)可以转化成a·x+p·y=1求逆元即求xtypedef long long ll;ll exgcd(ll a, ll b, ll &x, ll &y) //扩展欧几里得算法{ if (b == 0) { x = 1, y = 0; retu原创 2020-10-04 23:27:42 · 1064 阅读 · 1 评论 -
拓展欧几里得
关于欧几里得算法和拓展欧几里得算法求解两个数的最大公约数,有三种比较常用的算法:蛮力法、更相减损法以及欧几里得算法。在这里我们只讨论欧几里得算法,蛮力法的时间复杂度过大,不适合求解数据量比较大情况。而更相减损法与欧几里得算法其实有共通性。首先,欧几里得算法,可以用一个函数gcd()表示,我们假设现在有两个数a和b。1、gcd(a,b)= gcd(b,a)2、gcd(a,b)=gcd(b,a%b)3、gcd(a,0)=a通过以上三个公式,我们就可以求解两个数的最大公约数了。这里给一个例子:假设我原创 2020-10-04 22:33:55 · 212 阅读 · 0 评论 -
快速幂
问题描述:求A^B的最后三位数表示的整数说明:A^B的含义是A的B次方什么是快速幂这个题目看起来很简单,貌似A^B%1000就能得到答案,但真的是这样吗?如果按上述方法,当A=2,B=100时,2^100%1000得到却是0,这就有问题了。因此,如果题目让你求2的100次方,貌似我们程序设计语言中最大的long lnog类型也无法承载这么大的数值,所以题目才不会要求你输出结果,因为结果可能会非常的大,大到没有任何类型可以承载。所以我们会发现上面的结果为什么是0,因为已经发生溢出了。那为什么题目要原创 2020-10-02 17:43:08 · 199 阅读 · 0 评论 -
最大公约数(GCD)和最小公倍数(LCM)
思路:最大公约数用辗转相除法,最小公倍数等于n*m/最小公倍数。#include <iostream>using namespace std;int gcd(int m,int n){ return n==0? m : gcd(n,m%n);}int lcm(int m,int n){ return m*n/gcd(m,n);}int main(){ int n,m; cin>>n>>m; cout<<原创 2020-10-02 17:04:44 · 274 阅读 · 0 评论 -
欧拉筛(线性筛)
时间复杂度:O(n)比埃氏筛快,埃筛重复筛了许多数,如6被2筛了一次,又被3筛了一次思路:从2开始遍历,是素数就装起来,任一合数只被:“最小质因数 × 最大因数(非自己) = 这个合数”的途径筛除,这样保证合数只被筛除一次,只有唯一的筛除途径。如何确保是最小质因数:比如8执行完8 * 2(2是自然数中最小的质因数),如果说现在不退出循环,那么下一步8 * 3=24,则当前质因数是3,但是我们知道8的最小质因数是2(因为8%sushu[i]==0且循环为递增),那么很显然这里的3大于2,那就不满足唯一途原创 2020-10-02 16:44:57 · 164 阅读 · 0 评论 -
埃氏筛
题目:筛选1到n之间的素数思路:从2开始遍历,找到素数,将所有素数的倍数标记为合数(素数的倍数必定不是素数)时间复杂度:O(nloglogn)#include <iostream>#define maxn 100000+10using namespace std;int flag[maxn];//0为素数,1为合数int sushu[maxn];int main(){ int n,Count=0;//Count为指针 cin>>n; for(原创 2020-10-02 16:21:43 · 239 阅读 · 0 评论