欧拉

混合图的欧拉回路判定

巧了我就是萌 提交于 2019-12-17 08:12:06
  对于有向图和无向图的欧拉回路判定,很容易做到.那对于混合图呢??   混合图就是图中既存在无向边又存在有向边的图.   至于解法:  转载自这里   把该图的无向边随便定向,计算每个点的入度和出度。如果有某个点出入度之差为奇数,那么肯定不存在欧拉回路。因为欧拉回路要求每点入度 = 出度,也就是总度数为偶数,存在奇数度点必不能有欧拉回路。   好了,现在每个点入度和出度之差均为偶数。那么将这个偶数除以2,得x。也就是说,对于每一个点,只要将x条边改变方向(入>出就是变入,出>入就是变出),就能保证出 = 入。如果每个点都是出 = 入,那么很明显,该图就存在欧拉回路。    现在的问题就变成了:我该改变哪些边,可以让每个点出 = 入?构造网络流模型。首先,有向边是不能改变方向的,要之无用,删。一开始不是把无向边定向了吗?定的是什么向,就把网络构建成什么样,边长容量上限1。 另新建s和t。对于入 > 出的点u,连接边(u, t)、容量为x,对于出 > 入的点v,连接边(s, v),容量为x(注意对不同的点x不同)。之后,察看是否有满流的分配。有就是能有欧拉回路,没有就是没有。欧拉回路是哪个?察看流值分配,将所有流量非 0(上限是1,流值不是0就是1)的边反向,就能得到每点入度 = 出度的欧拉图。   由于是满流,所以每个入 > 出的点,都有x条边进来,将这些进来的边反向,OK,入 =

浅谈欧拉定理及乘法逆元

帅比萌擦擦* 提交于 2019-12-09 20:40:10
浅谈欧拉定理及乘法逆元 本篇随笔简单讲解一下信息学奥林匹克竞赛数论部分 欧拉定理及乘法逆元 这一知识点。介绍的内容大致分为这么几个部分: “同余的基本概念、费马小定理、欧拉定理及其推论、乘法逆元” 。 同余的基本概念 同余的概念啊非常简单啦:如果两个整数 \(a,b\) 除以一个数 \(m\) 的余数相等的话,那么就叫做 \(a,b\) 在模 \(m\) 的意义上同余。 记作: \[ a\equiv b\,\,\,(mod\,\,m) \] 那么根据同余的这个定义,我们很容易能推导出一个性质:如果两个数 \(a,b\) 在模 \(m\) 的意义下同余,那么 \(a-b\) 就是 \(m\) 的倍数,这是显然的。 以及,如果 \(a\%m=1\) ,那么就可以被改写成这样的式子: \[ a\equiv 1\,\,\,(mod\,\,m) \] 这个转化的正确性也是显然的。 费马小定理 费马小定理也非常简单啦!用语言描述就是,如果一个数 \(p\) 是质数,那么对于一个不为 \(p\) 的倍数的整数 \(a\) ,有 \(a^{p-1}\equiv 1\,\,\,(mod\,\,p)\) 。那么把这个结论两边同时乘上一个 \(a\) ,即可得出:对于任意的整数 \(a\) , \(a\) 的 \(p\) 次幂与 \(a\) 在模 \(p\) 的意义上同余。 即: \[ a^p

欧拉计划(6)Sum square difference

左心房为你撑大大i 提交于 2019-12-09 11:26:05
【题目】 The sum of the squares of the first ten natural numbers is, 1 2 + 2 2 + ... + 10 2 = 385 The square of the sum of the first ten natural numbers is, (1 + 2 + ... + 10) 2 = 55 2 = 3025 Hence the difference between the sum of the squares of the first ten natural numbers and the square of the sum is 3025 − 385 = 2640. Find the difference between the sum of the squares of the first one hundred natural numbers and the square of the sum. 【翻译】 前十个自然数的平方和是: 1 2 + 2 2 + ... + 10 2 = 385 前十个自然数的和的平方是: (1 + 2 + ... + 10) 2 = 55 2 = 3025 所以平方和与和的平方的差是3025 385 = 2640. 找出前一百个自然数的平方和与和平方的差。 【思路】直接套公式,简单题

欧拉路径的判断与查找

故事扮演 提交于 2019-12-08 14:46:35
判定 首先图必须是联通的,用并查集判即可 无向图欧拉回路:所有点度数都为偶数 无向图欧拉路径:两个点(或0个点)度数为奇数,其余点(或所有点)度数为偶数 有向图欧拉回路:所有点入度=出度 有向图欧拉路径:一个点入度=出度+1,一个点出度=入度+1,其余点(或所有点)入度=出度 查找-Hierholzer算法 //已知存在欧拉路径,找该路径 void dfs(int u){//s1~sn中存储的是欧拉路径上的点序列 for(int v=1;v<=n;v++){ if(mp[u][v]>0){ mp[u][v]--; mp[v][u]--; dfs(v); } } s[temp--]=u; } 为什么是对的? 因为找欧拉路径可以通过在图上的两个奇数点之间加一条边转化为求欧拉回路的问题。通过枚举可以发现,存在欧拉回路的图一定是由一些环嵌套而成(可以通过把一些点一分为二近似地看成仙人掌图) 将一个环看成主环,要一笔画走完主环,只要在遇到有副环的点u先沿着副环走一圈,再接着沿着主环走就好了 Hierholzer算法就是我们上述思路的一种简单的实现方法: 我们将开始dfs的点属于的环视为主环(其实可以有很多种不同的可能性,不一定就是最显然的那个环),在第一次dfs到无法递归下去时,所有被遍历到的点都在主环上,显然应该将最后遍历到的点放在答案数组的最后,然后一边回溯,如果还是无法递归

欧拉筛(筛素数)

人走茶凉 提交于 2019-12-05 10:54:32
复杂度 O(N) bool isPrime[1000001]; //isPrime[i] == 1表示:i是素数 int Prime[1000001], cnt = 0; //Prime存质数 void GetPrime(int n)//筛到n { memset(isPrime, 1, sizeof(isPrime)); //以“每个数都是素数”为初始状态,逐个删去 isPrime[1] = 0;//1不是素数 for(int i = 2; i <= n; i++) { if(isPrime[i])//没筛掉 Prime[++cnt] = i; //i成为下一个素数 for(int j = 1; j <= cnt && i*Prime[j] <= n/*不超上限*/; j++) { //从Prime[1],即最小质数2开始,逐个枚举已知的质数,并期望Prime[j]是(i*Prime[j])的最小质因数 //当然,i肯定比Prime[j]大,因为Prime[j]是在i之前得出的 isPrime[ i*Prime[j] ] = 0; if(i % Prime[j] == 0)//i中也含有Prime[j]这个因子 break; //重要步骤。见原理 } } } 来源: https://www.cnblogs.com/caijiaming/p/11921443.html

数学知识目录

我的未来我决定 提交于 2019-12-05 00:22:24
数学知识目录 已经完成的条目会加上链接 加上颜色但是没有链接的是还没码完的 我太菜了,我爆了,退役快乐。 组合数学 各种题型技巧(初赛) 卡特兰数 Lucas定理 数论 gcd及exgcd及线性同余方程相关 逆元 素数筛 \(\color{coral}{ok}\) 费马小定理 Miller-Rabin素数测试(看脸)* 中国剩余定理(CRT) EXCRT 欧拉定理及欧拉函数筛法 拓展欧拉定理 概率* 矩阵(刷公开课就行了啊喂) Gauss-Jordan消元 \(\color{#006666}{ok}\) Mtrix-tree* 矩阵加速 博弈论 SG函数 不知道是什么但是感觉很厉害的东西* FFT&FNTT 卷积* 平面凸包 旋转卡壳* 来源: https://www.cnblogs.com/thornblog/p/11891027.html

数论 FZU1759 降幂公式(欧拉函数+快速幂)

ε祈祈猫儿з 提交于 2019-12-04 15:50:01
Problem 1759 Super A^B mod C Accept: 1682 Submit: 5719 Time Limit: 1000 mSec Memory Limit : 32768 KB Problem Description 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 24 a^b mod c = ? b<=10^1000000,超级大数了,a,c均为long long范围内。 因为数据很大所以本题用降幂公式,嘛我的菜鸡水平也只能直接套公式了嘤 降幂公式 φ(m)(phi哈哈哈哈是这个音来着

poj-3696(欧拉定理+推导)

喜夏-厌秋 提交于 2019-12-04 15:37:59
Description Chinese people think of '8' as the lucky digit. Bob also likes digit '8'. Moreover, Bob has his own lucky number L . Now he wants to construct his luckiest number which is the minimum among all positive integers that are a multiple of L and consist of only digit '8'. Input The input consists of multiple test cases. Each test case contains exactly one line containing L (1 ≤ L ≤ 2,000,000,000). The last test case is followed by a line containing a zero. Output For each test case, print a line containing the test case number( beginning with 1) followed by a integer which is the length

欧拉函数、欧拉定理和费马小定理

三世轮回 提交于 2019-12-04 08:28:59
欧拉函数、欧拉定理和费马小定理 对于正整数n,欧拉函数是小于等于n的正整数中与n互质的数的数目,表示为φ(n)。 性质1:对于素数p,φ(p)=p-1。 性质2:对于两个互质数p,q,φ(pq)=φ(p)*φ(q)=(p-1)(q-1)。(积性函数)(易证) 性质3:若n是质数p的k次幂,φ(n)=p k -p k-1 =(p-1)p k-1 ,因为除了p的倍数外,其他数都跟n互质。 性质4: 因为:x可以分解成p1 q1 ×p2 q2 ×p3 q3 ……×pn qn (pi为x的质因数) 因为pi qi 两两互质,所以:φ(x)=φ(p1 q1 )×φ(p2 q2 )×φ(p3 q3 )……×φ(pn qn ) (性质2) 所以:φ(x)=(p1 q1 -p1 q1-1 )×(p2 q2 -p2 q2-1 )×(p3 q3 -p3 q3-1 )……×(pn qn -pn qn-1 ) (性质3) 提取x即得到公式。 性质5:n=Σφ(d|n) yu大有个牛逼的证法,把1到n的所有数除以n,变成n个既约分数,分母d只可能是n的约数。并且,以d为分母的分数个数正好是φ(d)。因此,分数总数n=Σφ(d|n)。 欧拉定理: 对于互质的正整数a和n,有 证明: ( 1 ) 令 Zn = {x1, x2, …, xφ(n)} (mod n), S = {a * x1, a * x2, …

P5091 【模板】欧拉定理

早过忘川 提交于 2019-12-04 00:22:12
如有乱码,请 点击 。 题目背景 出题人也想写有趣的题面,可惜并没有能力。 题目描述 给你三个正整数, a,m,b a , m , b,你需要求: a^b \bmod m a b m o d 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 m o d 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^8 1 ≤ m ≤ 1 0 8 #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<queue> using namespace std; int a,b,m,temp,phi,ans=1; bool flag