欧拉

PAT 甲级 1126 Eulerian Path (25 分)

倾然丶 夕夏残阳落幕 提交于 2019-11-28 11:08:13
思路: 1.结点度数全为偶数的为欧拉回路; 2.度数为奇数的结点数量为1或大于3的为非欧拉路径; 3.度数为奇数的结点数量为2的为欧拉路径; (PS:很多大佬讲这是根据题意得出的,本杠精小声bb一下,除了第一点题目也没说数量为2的就一定有欧拉路径,当然了每个人理解可能不一样,2、3两点稍微推理下也能得出来) 4.非连通图没有欧拉回路或者欧拉路径; 代码: # include <iostream> # include <vector> using namespace std ; bool isv [ 501 ] ; vector < vector < int >> v ; void dfs ( int n ) { isv [ n ] = true ; for ( int i = 0 ; i < v [ n ] . size ( ) ; i ++ ) if ( ! isv [ v [ n ] [ i ] ] ) dfs ( v [ n ] [ i ] ) ; } int main ( ) { int n , m ; scanf ( "%d%d" , & n , & m ) ; v . resize ( n + 1 ) ; for ( int i = 1 ; i <= m ; i ++ ) { int a , b ; scanf ( "%d%d" , & a , & b ) ; v [

FZU 1759 题解 欧拉降幂

让人想犯罪 __ 提交于 2019-11-28 06:15:57
本题考点:欧拉降幂 Super A^B mod C Given A,B,C, You should quickly calculate the result of A^B mod C. (1<=A,C<=1000000000,1<=B<=10^1000000). Input There are multiply testcases. Each testcase, there is one line contains three integers A, B and C, separated by a single space. Output For each testcase, output an integer, denotes the result of A^B mod C. Sample Input 3 2 4 2 10 1000 Sample Output 1 23 分析:欧拉降幂的模板题 直接套公式即可: AC代码: #include<iostream> #include<cstdio> #include<cstring> using namespace std; typedef long long ll; ll a,p; char b[10000005]; ll phi(ll x) { ll res=x; ll a=x; for(int i=2;i*i<=x;i++) {

ST表求LCA

萝らか妹 提交于 2019-11-28 03:46:08
https://www.luogu.org/problemnew/show/SP14932 思路:先遍历一遍得到欧拉序,然后根据询问找到对应节点在欧拉序第一次出现的位置.left, right,然后欧拉序中在left到right之间的深度最小的节点就是LCA。 如上图: 从4遍历得到的欧拉序是 4 2 4 1 3 1 5 1 4 得到的对应节点深度 1 2 1 2 3 2 3 2 1 比如查询3 和 2 的最近公共祖先,3 和 2 在欧拉序中第一次出现的位置 是 2 和 5 ,在欧拉序中他们之间的点(包括自己)有 2 4 1 3 ,深度最小是 1 ,即 节点4。所以3 和2 的LCA是4 #include<iostream> #include<cstdio> #include<vector> using namespace std; const int maxn = 5e5 + 5; const int maxbit = 20; vector<int>G[maxn]; int order[maxn * 4];//记录欧拉序 int depth[maxn * 4];//记录欧拉序序列每个点的深度 int n,m,s;//节点个数,询问次数,根节点 int lg[maxn * 4];//以2为底向下取整 int ST[maxn * 4][maxbit];/

欧拉路径详解

一世执手 提交于 2019-11-27 21:04:45
什么是欧拉路径?欧拉路径就是一条能够不重不漏地经过图上的每一条边的路径,即小学奥数中的一笔画问题。而若这条路径的起点和终点相同,则将这条路径称为欧拉回路。 如何判断一个图是否有欧拉路径呢?显然,与一笔画问题相同,一个图有欧拉路径需要以下几个条件: 首先,这是一个连通图 若是无向图,则这个图的度数为奇数的点的个数必须是0或2;若是有向图,则要么所有点的入度和出度相等,要么有且只有两个点的入度分别比出度大1和少1 上面这两个条件很好证明。查找欧拉路径前,必须先保证该图满足以上两个条件,否则直接判误即可。 查找欧拉路径的算法有Fluery算法和Hierholzer算法。下面介绍一下Hierholzer算法。 算法流程: 对于无向图,判断度数为奇数的点的个数,若为0,则设任意一点为起点,若为2,则从这2个点中任取一个作为起点;对于有向图,判断入度和出度不同的点的个数,若为0,则设任意一点为起点,若为2,则设入度比出度小1的点为起点,另一点为终点。具体起点的选择要视题目要求而定。 从起点开始进行递归:对于当前节点x,扫描与x相连的所有边,当扫描到一条(x,y)时,删除该边,并递归y。扫描完所有边后,将x加入答案队列。 倒序输出答案队列。(因为这里是倒序输出,我们可以用栈来存储答案,当然用双端队列也可以) 解析: 从起点开始,每一次执行递归函数,相当于模拟一笔画的过程

欧拉系列学习笔记

纵然是瞬间 提交于 2019-11-27 20:31:53
整理一下某咕日报内容。 原文地址 时刻告诉自己,我好菜啊。 菜到啥都不会证,只能硬背。。。 先热热身,欧拉筛: 通过不扫描它的重复因子来达到线性。 具体说就是记录一个数的最小质因子。 Code: flag[1]=1; for(int i=2;i<=n;i++) { if(!flag[i]) prime[++num]=i; for(int j=1;j<=num&&prime[j]*i<=n;j++) { flag[i*prime[j]]=1; if(i%prime[j]==0) break; } } 定义及性质 定义: 欧拉函数: \(\phi(x)\) 表示 \(<x\) 的数中与x互质的数的个数。 欧拉函数是积性函数。 硬背的结论 性质: 通项公式: \[\phi(x)=x*\prod_{i=1}^k (1-\frac1{p^i})\] 若 \(p\) 为质数,则 \[\phi(p^k)=p^k-p^{k-1}\] 小于 \(n\) 的数中,与 \(n\) 互质的数的总和为 \[\phi(n)*n/2 (n>1)\] 欧拉反演: 反正就是 \[f(x)=\sum_{d|n} \phi(d)\] 然后推了一通,最后得到 \[f(x)=x\] 。。。 话说这真的有意义吗 欧拉定理: 如果 \(a,p\) 互质,则: \[a^{\phi(p)}\equiv 1\pmod p\]

二次剩余的判断(欧拉准则)

[亡魂溺海] 提交于 2019-11-27 14:03:16
在数论中,特别在同余理论裏,一个整数 XX 对另一个整数 pp 的二次剩余(英语:Quadratic residue)指XX 的平方X2X2 除以 pp 得到的余数。 当对于某个d及某个X,式子X2≡d(modp)成立时,称“d是模pd及某个X,式子X2≡d(modp)成立时,称“d是模p的二次剩余” 当对于某个d及某个X,X2≡d(modp)不成立时,称“d是模pd及某个X,X2≡d(modp)不成立时,称“d是模p的二次非剩余” 欧拉准则: 若p是奇质数且p不能整除d,则: d是模p的二次剩余当且仅当: $d^{\frac{p-1}{2}}\equiv 1(mod p)$ d是模p的非二次剩余当且仅当: $d^{\frac{p-1}{2}}\equiv -1(mod p)$ 以勒让德符号表示,即为: $d^{\frac{p-1}{2}}\equiv (\frac{d}{p}) (mod p)$ 来源: https://www.cnblogs.com/wuliking/p/11366786.html

欧拉

浪尽此生 提交于 2019-11-27 07:12:05
euler函数 ​ euler函数是表示从1~n中与n互质的个数,互质的定义简单提一下, \(gcd(a,b)=1\) 。 ​ 那么如何求一个数的euler函数? ​ 我们可以将每个数与n求gcd一下,如果gcd为1,则贡献加1,时间复杂度为 \(O(n logn)\) ,极其优秀(雾) ​ 那么来思考更加优秀的算法(为什么一定要求euler函数( \(\varphi(n)\) 函数)呢QAQ) 引论 ​ 在算法基本定理中, \(N=p1^{c1}*p2^{c2}*p3^{c3}...\) ,其中pi为质因数,那么: ​ \(\varphi(N)=N*\frac{p1-1}{p1}*\frac{p2-1}{p2}...=\frac{pn-1}{pn}=N*\prod_{p|n} \frac{p-1}{p}\) 简单证明: ​ 设p是N的质因子,那么显然p的倍数与N不互质,这些数分别是 \(p*1,p*2...p*N/p\) , 显然有N/p个,那么我们可以减去这N/p个。设q是N的质因子,那么同理,q的倍数的个数有N/q个,那么在这N/p和N/q个当中有同时是p和q的倍数的,而我们多减了一次,我们容斥一下可以得到: ​ \(\varphi(N)=N-N/p-N/q+N/pq=N*(q-1)/q*(p-1)/p\) 那么推广到全部即可; 实现 ​ 我们可以枚举其质因数,不用素数筛

欧拉定理及扩展(附超易懂证明)

烈酒焚心 提交于 2019-11-27 06:12:55
欧拉定理 若 \(\gcd(a,m)=1\) ,则满足 \(a^{\varphi (m)} \equiv 1 \pmod m\) 证明 设 \([1,m)\) 内与 \(m\) 互质的数为数列 \(\{b_n\}=\{b_1,b_2,b_3,\cdots,b_{\varphi (m)}\}\) 因为 \(a,m\) 互质且 \(b_i,m\) 互质,所以数列 \(\{A_n\}=\{ab_1,ab_2,ab_3,\cdots,ab_{\varphi(m)}\}\) 中每个数都与 \(m\) 互质,且两两不同。 同时,由 \(\gcd(ab_i,m)=1\) 可得 \(\gcd(ab_i \bmod m,m)=1\) ,即每个 \(A_i\) 除以 \(m\) 的余数都与 \(m\) 互质,且余数两两不同。 可以用反证法推出“余数两两不同”。假设存在 \(ab_i \equiv ab_j \pmod m\) ,那么 \(ab_i-ab_j=km\ (k \in \mathbb{Z})\) ,即 \(a(b_i-b_j)=km\) 。由于 \(a\) 与 \(m\) 互质,那么只能是 \(m \mid (b_i-b_j)\) ,即 \(b_i \equiv b_j \pmod m\) 。这与 \(1 \leq b_i,b_j < m\) 且 \(b_i \neq b_j\)

Relatives POJ - 2407(不打表的欧拉函数 单求)

懵懂的女人 提交于 2019-11-26 17:20:24
Relatives POJ - 2407 题目链接: https://vjudge.net/problem/POJ-2407#author=0 题目: 给定n是一个正整数,有多少正整数小于n是n的相对素数? 如果没有整数x> 1,y> 0,z> 0使得a = xy且b = xz,则两个整数a和b是相对素数。 输入 有几个测试用例。 对于每个测试用例,标准输入包含n <= 1,000,000,000的行。 在最后一种情况下,包含0的行。 产量 对于每个测试用例,应该有单行输出来回答上面提出的问题。 样本输入 7 12 0 样本输出 6 4 思路:一开始打表做发现不行,数据范围太大,会超内存,RE,只能单个求 // // Created by hanyu on 2019/8/9. // #include <algorithm> #include <iostream> #include <cstdio> #include <cstring> #include <queue> #include <set> #include<math.h> #include<map> using namespace std; typedef long long ll; const int maxn=3e6+7; #define MAX 0x3f3f3f3f ll value(ll n) { ll

洛谷 P5091 【模板】欧拉定理

和自甴很熟 提交于 2019-11-26 12:51:28
题目 题目描述 给你三个正整数, a,m,b a , m , b,你需要求: a^b \bmod m a b mod m 输入格式 一行三个整数, a,m,b a , m , b 输出格式 一个整数表示答案 输入输出样例 输入 #1 复制 2 7 4 输出 #1 复制 2 输入 #2 复制 998244353 12345 98765472103312450233333333333 输出 #2 复制 5333 说明/提示 注意输入格式, a,m,b a , m , b 依次代表的是底数、模数和次数 样例1解释: 2^4 \bmod 7 = 2 2 4 mod 7 = 2 输出 2 数据范围: 对于全部数据: 1≤a≤10^9 1 ≤ a ≤ 1 0 9 1≤b≤10^{20000000} 1 ≤ b ≤ 1 0 2 0 0 0 0 0 0 0 1≤m≤10^6 1 ≤ m ≤ 1 0 6 分析 首先,我们需要知道欧拉定理,扩展欧拉定理 欧拉定理 a φ ( m ) ≡ 1 mod m 扩展欧拉定理 b ≥ φ ( m ) 时 , a^ b ≡ a^ ( b mod φ ( m ) ) + φ ( m ) mod m 那我们来证明下欧拉定理 定义一个n= φ ( m ) 设x1,x2,x3...xn是小于m与m互质的数 然后我们再设k为与m互质的数 gcd(k,m)=1