首页 欧拉函数模板

欧拉函数模板

举报
开通vip

欧拉函数模板欧拉函数模板 篇一:ACM数学模板 2.扩展欧几里得(求ax+by = gcd(a,b)的特解) voide_gcd(LL a, LL b, LL &d, LL &x, LL &y){ if(b==0){ x = 1; y = 0; d = a; } else{ e_gcd(b, a%b, d, y, x); y-= x*(a/b); } } 3.中国剩余定理 同余方程组 x ? a1(mod m1) x ? a2(mod m2) ... ... x ? ...

欧拉函数模板
欧拉函数 模板 个人简介word模板免费下载关于员工迟到处罚通告模板康奈尔office模板下载康奈尔 笔记本 模板 下载软件方案模板免费下载 篇一:ACM数学模板 2.扩展欧几里得(求ax+by = gcd(a,b)的特解) voide_gcd(LL a, LL b, LL &d, LL &x, LL &y){ if(b==0){ x = 1; y = 0; d = a; } else{ e_gcd(b, a%b, d, y, x); y-= x*(a/b); } } 3.中国剩余定理 同余方程组 x ? a1(mod m1) x ? a2(mod m2) ... ... x ? ak(mod mk) 1 方程组所有的解的集合就是: x1 = N1*a1 + N2*a2 + ... + Nk*ak 其中 Ni mod mi = 1,Ni = ai * ti , 可用欧几里得扩展定理求 ti. 其中M = m1*m2*m3????*mn; //互质版 #include <iostream usingnamespacestd; //参数可为负数的扩展欧几里德定理 voidexOJLD(int a, int b, int&x, int&y){ //根据欧几里德定理 if(b == 0){//任意数与0的最大公约数为其本身。 x = 1; y = 0; }else{ int x1, y1; exOJLD(b, a%b, x1, y1); if(a*b <0){//异号取反 x = - y1; y = a/b*y1 - x1; }else{//同号 x = y1; y = x1 - a/b* y1; 2 } } } //剩余定理 intcalSYDL(int a[], int m[], int k){ int N[k];//这个可以删除 int mm = 1;//最小公倍数 int result = 0; for(inti = 0; i< k; i++){ mm *= m[i]; } for(int j = 0; j < k; j++){ int L, J; exOJLD(mm/m[j], -m[j], L, J); N[j] = m[j] * J + 1;//1 N[j] = mm/m[j] * L;//2 【注】1和2这两个值应该是相等的。result += N[j]*a[j]; } return (result % mm + mm) % mm;//落在(0, mm)之间,这么写是为了防止result初始为负数,本例中不可能为负可以直接 写成:return result%mm;即可。 } 3 intmain(){ inta[3] = {2, 3, 2}; intm[3] = {3, 5, 7}; cout<<结果:<<calSYDL(a, m, 3)<<endl; } //不互质版 /** 中国剩余定理(不互质) */ #include <iostream #include <cstdio #include <cstring using namespace std; typedef long long LL; LL Mod; LL gcd(LL a, LL b) if(b==0)return a; return gcd(b,a%b); } LL Extend_Euclid(LL a, LL b, LL&x, LL& y) { if(b==0) {x=1,y=0;return a; } LL d = Extend_Euclid(b,a%b,x,y); LL t = x; x = y; y = t - a/b*y; return d; } //a在模n乘法下的逆元,没有则返回-1 LL inv(LL a, LL n) { LL x,y; LL t = Extend_Euclid(a,n,x,y); 4 if(t != 1)return -1; return (x%n+n)%n; } //将两个方程合 并为一个 bool merge(LL a1, LL n1, LL a2, LL n2, LL& a3, LL& n3) { LL d = gcd(n1,n2); LL c = a2-a1; if(c%d)return false; c = (c%n2+n2)%n2; c /= d; n1 /= d; n2 /= d; c *= inv(n1,n2); c %= n2; c *= n1*d; n3 = n1*n2*d; a3 = (c%n3+n3)%n3; return true; } //求模线性方程组x=ai(mod ni),ni可以不互质 LL China_Reminder2(intlen, LL* a, LL* n) { LL a1=a[0],n1=n[0]; LL a2,n2; for(inti = 1; i<len; i++) {LL aa,nn;a2 = a[i],n2=n[i];if(!merge(a1,n1,a2,n2,aa,nn)) return -1;a1 = aa;n1 = nn; } Mod = n1; return (a1%n1+n1)%n1; } LL a[1000],b[1000]; int main() { inti; int k; while(scanf(%d,&k)!=EOF) {for(i = 0; i< k; i++) scanf(%I64d %I64d,&a[i],&b[i]);printf(%I64d\n,China_Reminder2(k,b,a)); } return 0; } 4.欧拉函数(求一个数前面的所有与这个数互质的数的 个数) Euler函数表达通式: euler(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…(1-1/pn),其中 p1,p2……pn为x的所有素{ res=res/i*(i-1);//先进行除法是为了防止中间数据的溢出 5 while(a%i==0) a/=i; } } if(a1) res=res/a*(a-1); return res; } //线性筛选欧拉函数O(n)用到了一下性质: //(1) 若(N%a==0 && (N/a)%a==0) 则有:E(N)=E(N/a)*a; //(2) 若(N%a==0 && (N/a)%a!=0) 则有:E(N)=E(N/a)*(a-1); //注意:如果范围过大 可能不适宜开数组来做 inteuler[maxN], vis[maxN], prime[maxN/5], e[maxN], cnt = 0; void make_euler(){ memset(vis, 0, sizeof(vis)); euler[1] = 1; for(inti=2; i<maxN ; ++i){ if(vis[i] == 0){ prime[cnt++] = i; euler[i] = i-1; } for(int j=0 ; j<cnt&&i*prime[j] <maxN; 6 ++j){ vis[i*prime[j]] = 1; if( i%prime[j] == 0){ euler[i*prime[j]] = euler[i] *prime[j];break; } else euler[i*prime[j]] = euler[i] *(prime[j]-1); } } } 篇二:ACM算法竞赛模板个人 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf 数 学 ................................................................................................................................................ 4 最大公约数、最小公倍 数 ....................................................................................................... 4 最大公约数——欧几里得算法 O(n) ...................................................................................... 4 Stein算法 O( log(max(a,b)) ) ........................................................................................... 4 最小公倍 数: ............................................................................................. 7 .............................. 4 素数相 关 ................................................................................................................................... 5 普通素数判 断 ................................................................................................................... 5 筛法求素数[1, N] ........................................................................................................... 5 二次筛法求素数[L, R] ................................................................................................... 6 Miller-Rabbin素数测试方 法 ........................................................................................ 7 算术基本定理的定义和性 质: ............................................................................................... 8 同余方程[组] 乘法模逆元 中国剩余定 理 ........................................................................... 9 扩展欧几里得,求一组解x,y,使得gcd(a,b) = d = a * x + b * y ................. 9 8 扩展欧几里得,求所有解x,y,使得c = a * x + b * y ..................................... 10 扩展欧几里得,求a关于n的逆元a1,使得a * a1 ? 1(mod n) ............... 10 扩展欧几里得,求解x,满足同余方程组x ? Ri(mod Ai) ................................... 10 扩展欧几里得,求解x,满足高次同余方程A ? B(mod C) ............................... 11 中国剩余定 理: ............................................................................................. ........................ 13 中国剩余定理最小非负数解的算 法: ................................................................................. 14 求解a*x + b*y = c的其中一组解,使得|x| + |y|尽可能小, 若相等,则a|x| + b|y|尽可能 小。 ............................................................................................. ................ 15 整数快速 幂 ................................................................................................. ............................ 16 矩阵快速 9 幂 ............................................................................................................................. 16 整数分 解 ................................................................................................................................. 18 试除法整数分 解 ............................................................................................................. 18 筛法整数分 解 ................................................................................................................. 18 PollardRho大整数分 解 ................................................................................................ 19 欧拉函 数 ................................................................................................................................. 22 直接欧拉函 数 ................................................................................................................. 22 递推快速求欧拉函 数 ................................................................................................. 10 .... 23 容斥原 理 ................................................................................................................................. 23 母函 数..................................................................................................................................... 24 普通母函 数 ..................................................................................................................... 24 指数型母函 数 ................................................................................................................. 25 其他相 关 ................................................................................................................................. 27 九余数定理:一个数N各位数字的和,对9取余等于这 个数对9取余 ................. 27 给你一个奇数N,求1~N的奇数平方和: S = N*(N+1)*(N+2)/6 .......................... 27 约瑟夫问题:有N个人, 编号为1~N,按顺时针围成一个圈,每数k个人,就将这 个人从圈中消除,问:最终只留下一个人的编 11 号。 ................................................. 27 给你整数x和y的和 以及x和y的积,是否能找到满足这两个式子的整数x和整 数 y。 ................................................................................................................................... 29 Fibonacci数列大于40前四位数 字 ............................................................................ 29 小于N的素数个数为π(N),π(N)的位数是多 少, ................................................... 29 Stirling公式:当N足够大时,N! = (N/e) * N * sqrt(2*pi*N)。 .................. 29 有N张卡,将N张卡分成若干不同的集合,集合不能为空。 问:总共有多少种分法。 ......................................................................................................................................... 29 字符 串 ............................................................................................................................................ 29 KMP........................................................................................................................................... 29 12 1. 既能做前缀又能做后缀的子串长 度 ....................................................................... 30 2.求最短子串长 度 ......................................................................................................... 30 3.求模式串pat在主串str中匹配次 数 ..................................................................... 30 4.求N行M列的字符矩阵,最小的字符子矩阵的面 积 ............................................. 30 5.求字符串s的循环前缀的长度和循环的次 数 ......................................................... 30 字典 树..................................................................................................................................... 31 数据结 构......................................................................................................................................... 33 并查 集..................................................................................................................................... 33 树状数 组 ................................................................................................. 13 ................................ 33 单点更新,区间求值:树状数组代表区间的 和。 ..................................................... 33 区间更新,单点求值:树状数组代表单个元素的变 化 ............................................. 34 求逆序数: 数组Tree[i] 表示数字i是否在序列中出现过,如果数字i已经存在于序 列中,Tree[i] = 1,否则Tree[i] = 0。按序列从左到右将值为 a的元素当作下标为a,赋值为1插入树状数组里,这时, 比a的数个数就是i - Query(a)。 将全部结果累加起来就是逆序数 了。 ......................................................................... 35 二维树状数 组: ............................................................................................................. 36 线段 树..................................................................................................................................... 36 单点更 新 ......................................................................................................................... 37 成段更 新 ................................................................................................. 14 ........................ 43 区间合 并 ......................................................................................................................... 52 扫描 线 ............................................................................................................................. 54 图 论 .............................................................................................................................................. 58 图的五种种存储方 式 ............................................................................................................. 58 方式1:邻接矩 阵 .......................................................................................................... 58 方式2:前向 星 .............................................................................................................. 58 方式3:邻接表——动态建 表 ...................................................................................... 59 方式4:邻接表——vector模拟链表实 15 现 ................................................................. 60 方式5:邻接表——链式前向星 ? .............................................................................. 61 拓扑排 序 ................................................................................................................................. 62 最小生成 树 ............................................................................................................................. 63 Kruskal算 法: .............................................................................................................. 63 Prim算 法: .................................................................................................................... 64 次小生成 树 ............................................................................................................................. 66 最小树形 图 ............................................................................................................................. 68 最近公共祖先LCA—Tarjan-LCA算 16 法: ............................................................................. 72 树的最小支配集、最小点覆盖、最大独立 集 ..................................................................... 74 最小支配集:指从所有顶点中取尽量少的点组成一个集 合,使得剩下的所有点都与取出来的点有边相连。顶点个数 最小的支配集被称为最小支配集。这里用贪心法来 求。 ................................................................................................................................. 74 最小点覆盖:指从所有顶点中取尽 量少的点组成一个集合,使得集合中所有的边都 与取出来的点有边相连。顶点个数最小的覆盖集被称为最 小点覆盖。 ................. 76 最大独立集:指从所有顶点中取 尽量多的点组成一个集合,使得这些点之间没有边 相连。顶点个数最多的独立集被称为最大独立 集。 ................................................. 77 单源最短路径Dijkstra、BellmanFord、 SPFA .................................................................. 77 Dijkstra算 法: ............................................................................................................ 77 BellmanFord算 法: ............................................................................................. 17 ......... 79 SPFA算 法: .................................................................................................................... 81 多源最短路径Floyd、Floyd求最小 环 ............................................................................... 84 Floyd算法:用来找出每对点之间的最短距离。图可以是 无向图,也可以是有向图, 边权可为正,也可以为负,唯一要求是不能有负 环。 ............................................. 84 Floyd求最小 环 .............................................................................................................. 85 K短路—A*+SPFA算 法: ....................................................................................................... 86 差分约束系 统 ......................................................................................................................... 89 强连通分量Kosaraju、 Tarjan ............................................................................................ 92 18 Kosaraju算 法: ............................................................................................................ 92 Tarjan算 法: ................................................................................................................ 94 2-SAT....................................................................................................................................... 97 二分 图................................................................................................................................... 100 二分图最大匹配——匈牙利算法DFS 版: ............................................................... 100 二分图多重 匹 配: ....................................................................................................... 101 二分图最佳匹配——KM算 法: .................................................................................. 102 网 络流最大流EdmondKarp、 SAP ........................................................................................ 104 EdmondKarp算 法: ...................................................................................................... 104 SAP算 19 法: ............................................................................................. ....................... 106 输入输出外挂—仅适合纯数字输入 ................................................................................... 109 数 学 最大公约数、最小公倍数 最大公约数、最小公倍数性质: 1.若a | m,b | m,则lcm(a,b) | m。 2.若d | a,d | b,则d | gcd(a,b)。 3.lcm(a,b) = a * b / gcd(a,b)。 4.设m,a,b是正整数,则lcm(m*a,m*b) = m * gcd(a,b) 5.若m是非零整数a1,a2,…,an的公倍数,则lcm(a1,a2,…,an) | m用素因子分解法求a和b的最大公约数和最小公倍数: a = p1 1 * p2 2 * … * pk k b = p1 1 * p2*s2 * … * pk k gcd(a,b) = p1 20 in(r1,s1) * p2 21 in(r2,s2) * … * pk 22 in(rk,sk) lcm(a,b) = p1 23 ax(r1,s1) * p2 24 ax(r2,s2) * … * pk 25 ax(rk,sk) 最大公约数——欧几里得算法O(n) int GCD(int a,int b) { if(a < b) int temp = a, a = b, b = temp; if(b == 0) return a; return GCD(b,a%b); } Stein算法O( log(max(a,b)) ) int KGCD(int a,int b) { if(a == 0) return b; if(b == 0) return a; if(~a & 1) { if(b & 1) return KGCD(a1, b); else return KGCD(a1, b1) << 1; } if(~b & 1) return KGCD(a, b1); if(a b) return KGCD((a-b)1, b); return KGCD((b-a)1, a); } 26 最小公倍数: int LCM(int a,int b) { return a/KGCD(a,b)*b; 。 } 素数相关 素数和合数共同的性质: 1.a 1是合数,当且仅当a = b * c,其中1 < b < a,1 < c < a。 2.合数必有素数因子。 3.如果d 1,p是素数,且d | q,则d = p。 4.设p是素数且p | a*b,则必有p | a或者p | b。 素数的性质: 1.存在无穷多个素数。 2.每个大于1的正整数都有一个素因子。 素数的分布: 素数定理:用π(x)估计小于正整数x的素数有多少个。随着x的增长,π(x) / (x/ln x) = 1。 推论:令pn是第n个素数,其中n是正整数,那么pn ~ n*ln n。 素数的猜想: 1.波特兰猜想:对于任意给定的正整数n,其中n 1,存 27 在一个素数p,使得n < p < 2*n。 2.孪生素数猜想:存在无穷多的形如p和p+2的素数对。 3.哥德巴赫猜想:每个大于2的正偶数可以写成两个素数的和。可推出任一大于7的奇数都可写成三个质数之和的猜想。 普通素数判断 int IsPrime(int N)//注意#include<cmath { if(N <= 1) return 0; int i; for(i = 2; i <= sqrt(N*1.0); ++i) if(N%i == 0) return 0; return 1; } 筛法求素数[1,N] const int MAXN = 1000000; bool Prime[MAXN+100];//Prime[i] == true表示i为素数 void IsPrime() { for(int i = 2; i <= MAXN; ++i) Prime[i] = true; for(int i = 2; i <= MAXN; ++i) 28 if(Prime[i]) for(int j = i+i; j <= MAXN; j+=i) Prime[j] = false; } 篇三:数论算法模板 头文 件....................................................................................................................................... 2 求素数[1,n],返回素数个 数 ...................................................................................................... 3 得到区间 [a ,b ] 之间的素 数 ................................................................................................. 3 求 a*b%c ................................................................................................................................................................ 5 求x的欧拉函数 值 ................................................................................................................... 5 快速求欧拉函数和素 数。 ............................................................................................. 29 .......... 6 求解 a * x = b mod n............................ .................................................................................... 7 求解 gcd (a,b) = a * x + b * y (切忌 unsigned) ....................................................................... 7 x = a[i] mod m[i] . ..................................................................................................................... 8 求约数和模板,fac[]存储所求数的因数分解 式 ................................................................. 10 给出随机数,可以简单的用rand()代 替 .............................................................................. 10 rabinmiller方法测试n是否为质 数 ...................................................................................... 11 pollard_rho分解,给出N的一个非1因 数, .................................................................... 12 找出N的最小质因 数 ............................................................................................................ 13 用中国剩余定理解同余方程组a=bi (modni) ..................................................................... 13 进制转 30 换 ................................................................................................................................. 14 牛顿迭代法求开 方 ................................................................................................................. 14 字符串s表示的数字对一个整数取 摸 ................................................................................. 14 得到素数m的原根,需要素数 表 ........................................................................................... 15 满足gcd(n,i) = 1 并且 i <=,成立的,的个 数 ...................................................................... 17 得到一个数字的二进制表达式的第i 位 .............................................................................. 18 求第k个与n互素的数,需要素数 表 .................................................................................... 18 求解x = a mod (n) 。n为素 数. ........................................................................................ 20 求解pell方 程 ......................................................................................................................... 20 求pell方程的第i个 解 ................................................................................................. 31 ......... 21 求解 x - a*b*y = 1。的最小解 (pell) ........................................................................ 22 求离散对数A = B mod C 模板 c不一定要素 数 ........................................................ 23 求最小x使得a = 1 mod n ............................................................................................... 26 保证pn<=L,pd<=L 并且pn/pd 最接近 A. .......................................................................... 26 m<10, 一个这样的数:M = mmm...mm,要求 M%k=0. ......................................................... 28 求n所有的约数 和 ......................................................................................................................... 32 求最大的并且不大于n的最大反素 数 ................................................................................. 33 整数HASH ,用以统一每个数字出现的次 数 ....................................................................... 34 同上,速度较快的一 种 ......................................................................................................... 37 32 Sum(gcd(x,y) ) 1<=x,y<=n ................................................................................................... 38 大整数因数分 解 ..................................................................................................................... 39 三分模 板 ................................................................................................................................. 42 哥德巴赫猜 想 ......................................................................................................................... 42 梅森合数的因数分 解 ............................................................................................................. 43 计算前n个Catalen数和 mod m ....................................................................................... 44 矩阵相 关 ............................................................................................................................... 46 头文件 #include <stdio.h 33 #include <string.h #include <stdlib.h #include <ctype.h #include <math.h #include <time.h #include <set #include <map #include <stack #include <queue #include <string #include <bitset #include <vector #include <deque #include <list #include <sstream #include <iostream #include <functional #include <numeric #include <algorithm using namespace std; template<class Tinline T iabs(const T& v) {return v<0 ? -v : v;} 34 template<class Tinline T strTo(string s){istringstream is(s);T v;isv;return v;} template<class Tinline string toStr(const T& v){ostringstream os;os<<v;return os.str();} template<class Tinline int cMin(T& a, const T& b){return b<a?a=b,1:0;} template<class Tinline int cMax(T& a, const T& b){return a<b?a=b,1:0;} template<class Tinline int cBit(T n){return n?cBit(n&(n-1))+1:0;} #define ep 1E-10 #define CLR(arr,v)memset(arr, v, sizeof(arr)) #define SQ(a) ((a)*(a)) #define DEBUG(a) printf(%s = %s\n, #a, toStr(a).c_str()) #define FOR(i,s,e) for( u64 (i)=(s); (i) < (e) ; i++) Const u64 inf3 = 0x15fffffffffffffffll; int inf4 = 0x7fffffffl; typedef long long u64; 求素数[1,n],返回素数个数 bool is[1000010];//用来求素数[1,130000] int prm[100000];//用来保存素数 int totleprm;//记录素数总个数 void getprm(int n) 35 { int i; memset(is,1,sizeof(is)); is[1]=0; prm[totleprm++]=2; for (i=4; i<=n; i+=2) is[i]=0; for (i=3; i*i<=n; i+=2) if (is[i]) { prm[totleprm++]=i; for (int s=2*i,j=i*i; j<=n; j+=s) is[j]=0; } for (; i<=n; i++) if (is[i]) prm[totleprm++]=i; } 得到区间 [a ,b ] 之间的素数 注意:需要前 6000个素数 (一般) int subprm[100010]; int getSubPrm(u64 a,u64 b) { u64 totl = 0,i,j; 36 bool sign[1000010]; memset(sign,true,sizeof(sign)); if (a < 2) a = 2; u64 l = b - a + 1; for ( i=0; i<totleprm;i++) { if ((j=prm[i]*(a/prm[i]))<a) j += prm[i]; if (j<prm[i]*prm[i]) j = prm[i] * prm[i]; for ( ; j<=b ; j+=prm[i]) sign[j-a] = false; } for (i=0;i<l;i++) if (sign[i]) subprm[totl++] = a + i; return totl; } 求a*b%c 要求:a,b的范围在hugeint范围的一般以内,在hugeint 为unsigned __int64时,a,b需要是__int64能表示的数 u64 power_mod(u64 A, u64 B, u64 C) R = 1, D = A; while (B ) { if (B&1) R = product_mod(R, D, C); D = product_mod(D, D, C); 37 B =1; } return R; } 求x的欧拉函数值 注意:需要素数表 u64 euler(u64 x) { int i ; u64 res = x; for (i = 0; prm[i] < (u64 )sqrt(x * 1.0) + 1 && i < totleprm; i++) if (x % prm[i] == 0) { res = res / prm[i] *( prm[i] - 1); while (x % prm[i] == 0 ) x/=prm[i]; } if (x 1) res = res / x * (x-1); return res; } 求x的欧拉函数值 u64 phi[1000001]; void euler(int maxn) 38 { int i; int j; for (i = 2; i <= maxn; i++) phi[i] = i; for (i = 2; i <= maxn; i+=2) phi[i] /=2; for (i = 3; i <= maxn; i+=2) if (phi[i] == i) { for (j = i; j<=maxn; j+=i) phi[j] = phi[j] / i * (i-1); 相关热词搜索:函数 模板 欧拉 欧拉函数证明 欧拉函数 公式 39
本文档为【欧拉函数模板】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_348501
暂无简介~
格式:doc
大小:80KB
软件:Word
页数:35
分类:初中语文
上传时间:2017-09-25
浏览量:50