欧拉

欧拉筛素数+求欧拉函数

泪湿孤枕 提交于 2020-02-28 11:24:55
线性筛法 prime记录素数,num_prime素数下标 它们保证每个合数只会被它的最小质因数筛去 a[0]=a[1]=1; for(int i=2;i<=n;i++) { if(!a[i]) prime[num_prime++]=i; for(int j=0;j<num_prime&&i*prime[j]<=n;j++) { a[i*prime[j]]=1; if(!(i%prime[j])) break; } } } 欧拉函数 是 积性函数:对于任意互质的整数a和b有性质f(ab)=f(a)f(b)的数论函数。 通式: 其中p1, p2……pn为x的所有质因数,x是不为0的整数。 φ(1)=1(唯一和1互质的数(小于等于1)就是1本身)。 注意:每种质因数只一个。 比如12=2*2*3那么φ(12)=12*(1-1/2)*(1-1/3)=4 若n是质数p的k次幂, ,因为除了p的倍数外,其他数都跟n互质。 设n为正整数,以 φ(n)表示不超过n且与n互素的正整数的个数,称为n的欧拉函数值 φ:N→N,n→φ(n)称为欧拉函数。 欧拉函数是积性函数——若m,n互质, 特殊性质:当n为奇数时, , 证明与上述类似。 若n为质数则 #include<cstdio> #include<cstring> #define MAXN 100005 #define MAXL 1299710

DTOJ 4724. 欧拉路径树

☆樱花仙子☆ 提交于 2020-02-21 19:33:50
题意 ETT 的一种解释:对大小为 n n n 的树进行 dfs,记录每一步到达的点,生成长为 2 n − 1 2n-1 2 n − 1 的序列,称为该树的 ETT. 例如, n = 7 n=7 n = 7 的满二叉树的一个 ETT 为 1 , 2 , 4 , 2 , 5 , 2 , 1 , 3 , 6 , 3 , 7 , 3 , 1 1,2,4,2,5,2,1,3,6,3,7,3,1 1 , 2 , 4 , 2 , 5 , 2 , 1 , 3 , 6 , 3 , 7 , 3 , 1 . 设有大小为 n n n 、以 1 1 1 为根 的树,现给出其 ETT 的一部分,请还原原 ETT。 #1(20pts): T = 10 , n ≤ 5 T=10,n\le 5 T = 1 0 , n ≤ 5 . #2(30pts): T = 10 , n ≤ 1 0 3 T=10,n\le 10^3 T = 1 0 , n ≤ 1 0 3 . #3(50pts): ∑ n ≤ 5 × 1 0 5 \sum{n}\le 5\times 10^5 ∑ n ≤ 5 × 1 0 5 . 保证有解。 题解 发现两个给定的相同的数 x x x 之间的数一定是 x x x 的一个子树的欧拉序,考虑把每两个相同的数之间的欧拉序先确定,注意到这中间不会有给定的相同的数(如果有就会先处理掉),做完后把这个区间缩成

欧拉计划第1题题解

孤街醉人 提交于 2020-02-17 16:28:26
Multiples of 3 and 5 If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23. Find the sum of all the multiples of 3 or 5 below 1000. 3的倍数和5的倍数 如果我们列出10以内所有3或5的倍数,我们将得到3、5、6和9,这些数的和是23。 求1000以内所有3或5的倍数的和。 解题思路 区间 \([1,n]\) 范围内 \(a\) 的倍数构成了一个首项为 \(a\) ,末项为 \(\lfloor \frac{n}{a} \rfloor \cdot a\) ,项数为 \(\lfloor \frac{n}{a} \rfloor\) 的等差数列。 所以我们可以通过等差数列求和公式((首项+末项) \(\times\) 项数 /2)直接获得求这个等差数列的和为: \[\frac{(a + \lfloor \frac{n}{a} \cdot a \rfloor) \times \lfloor \frac{n}{a} \rfloor}{2}\] 我们定义函数 \(f(n,a)\) 表示区间 \([1, n]\)

欧拉回路与欧拉路径笔记

徘徊边缘 提交于 2020-02-03 01:27:10
欧拉路径:存在一个路径,走完所有的点,使得每个边只走了一次。 对于起点来说:我们只出去。 对于终点来说:我们只进来。 所以对于起点和终点来说,我们的度数都是奇数 对于中间点来说:我们需要一进一出。 所以对于中间点来说,我们所有的度数都是偶数 结论:1,存在欧拉路径的充要条件是图中奇数的点只能有0或者2个。 2,对于无向图,存在欧拉回路的充要条件(1)所有点的度数都是偶数 。 对于有向图来说: 1,存在欧拉路径的充要条件是:要么两个点的出度等于入度。要么除了两个点之外,其余点的出度等于入度。这两个点满足:一个满足入度比出度多1(终点),另一个满足出度比入度多1(起点)。 2,存在欧拉回路的充要条件:所有点的出度等于入度。 来源: CSDN 作者: 行走天涯的豆沙包 链接: https://blog.csdn.net/weixin_42979819/article/details/104144866

欧拉函数和欧拉定理

好久不见. 提交于 2020-01-31 15:33:41
欧拉函数和欧拉定理 参考: 欧拉函数 欧拉函数: 欧拉函数,即 \(\varphi(n)\) ,表示的是小于等于 \(n\) 和 \(n\) 互质的数的个数。 比如 \(\varphi(1)=1\) 。 利用唯一分解定理,我们可以把一个整数唯一地分解为质数幂次的乘积, 设 \(n=p_1^{k_1}p_2^{k_2}...p_s^{k_s}\) ,其中 \(p_i\) 是质数,那么 \(\varphi(n)=n\times\prod_{i=1}^s\frac{p_i-1}{p_i}\) int phi(int n) { int ans=n; for(int i=2;i*i<=n;++i) if(n%i==0){ ans-=ans*i; while(n%i==0) n/=i; } if(n>1) ans-=ans*i; return ans; } 欧拉函数的性质: ①欧拉函数是积性函数: 如果有 \(gcd(a,b)=1\) ,那么 \(\varphi(a\times b)=\varphi(a)\times \varphi(b)\) 特别的,当 \(n\) 为奇数时, \(\varphi(2n)=\varphi(n)\) ② \(n=\sum_{d|n}\varphi(d)\) 即表示, \(n\) 的所有因子的欧拉函数的值加起来为 \(n\) ③如果 \(gcd(k,n)=d\)

欧拉回路、欧拉通路、欧拉图、半欧拉图等有关欧拉图的讲解与代码实现

白昼怎懂夜的黑 提交于 2020-01-30 20:05:51
有人说,图论的起源,就是源于欧拉图 (千万别看成柏拉图) ——题记 首先,先要讲一些有必要知道的东西: 当然,我在这里也写过,这里再给出一些拓展的内容 欧拉通路 : 通过图中每条边且只通过一次,并且经过每一顶点的通路 欧拉回路 : 通过图中每条边且只通过一次,并且经过每一顶点的回路 有向图的基图:忽略有向图所有边的方向,得到的无向图称为该有向图的基图。 欧拉图与半欧拉图 : 欧拉图指的是给出的图G<V, E>,满足所有的点V联通,并且每个点的度都是偶数,则图中的所有的边都可以一笔画经过,并且回到起始点,则我们说给出的图G是欧拉图; 半欧拉图的性质与欧拉图相似,但是它可以首尾不相连接,也就是这幅图是欧拉通路,满足图中的所有的边都可以一笔画经过,但是不要求回归起点。 无向图的欧拉图判定与有向图的欧拉图判定 无向图 设G是连通无向图,则称经过G的每条边一次并且仅一次的路径为欧拉通路; 如果欧拉通路是回路(起点和终点是同一个顶点),则称此回路是欧拉回路 具有欧拉回路的无向图G成为欧拉图 有向图 (1)设D是有向图,D的基图连通,则称经过D的每条边一次并且仅有一次的有向路径为 有向欧拉通路 (2)如果有向欧拉通路是有向回路,则称此有向回路为 有向欧拉回路 (3)具有有向欧拉回路的图D称为有向欧拉图 定理(无向图) 无向图G存在欧拉通路的充要条件是:G为连通图,并且G仅有两个奇度结点

欧拉通路与欧拉回路问题

倖福魔咒の 提交于 2020-01-30 03:56:49
版权声明:本文为CSDN博主「Alex_McAvoy」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/u011815404/article/details/86590498 目录 【基本概念】 【欧拉通路/回路的判定】 1.无向图 2.有向图 3.并查集判断无向图中是否存在欧拉回路 4.Fleury 算法 【应用】 1.无向欧拉图打印欧拉通路/回路 2.有向欧拉图打印欧拉通路/回路 1)邻接矩阵实现 2)邻接链表实现 【基本概念】 欧拉通路:通过图中所有边一次且仅一次行遍所有顶点的通路 欧拉回路:通过图中所有边一次且仅一次行遍所有顶点的回路 欧拉图:具有欧拉回路的图 半欧拉图:具有欧拉通路而无欧拉回路的图 奇度点:与点相连的边的数目为奇数的点 偶度点:与点相连的边的数目为偶数的点 【欧拉通路/回路的判定】 1.无向图 1)欧拉通路:图是连通的,图中只有两个奇度点,分别是欧拉通路的两个端点 对于欧拉通路,除起点、终点外,每个点如果进入,显然一定要出去,因此都是偶点 2)欧拉回路:图是连通的,点均为偶度点 对于欧拉回路,每个点进入、出去的次数相等,因此没有奇点 2.有向图 1)欧拉通路:图是连通的,除两顶点外其余点的入度等于出度,且这两个顶点中,一个顶点入度比出度大1(起点)

HDU 2824 The Euler function(欧拉函数)

不想你离开。 提交于 2020-01-24 00:27:11
Problem Description The Euler function phi is an important kind of function in number theory, (n) represents the amount of the numbers which are smaller than n and coprime to n, and this function has a lot of beautiful characteristics. Here comes a very easy question: suppose you are given a, b, try to calculate (a)+ (a+1)+....+ (b) Input There are several test cases. Each line has two integers a, b (2<a<b<3000000). Output Output the result of (a)+ (a+1)+....+ (b) Sample Input 3 100 Sample Output 3042 题意: 给两个数a和b,求这两个数之间的数的欧拉函数值之和 思路: 利用欧拉函数和它本身不同质因数的关系,用筛法计算出某个范围内所有数的欧拉函数值。 (p是数N的 质因数 ) 代码:

四元数和欧拉角

空扰寡人 提交于 2020-01-23 16:28:53
来源:http://blog.csdn.net/candycat1992/article/details/41254799 四元数介绍 旋转,应该是三种坐标变换——缩放、旋转和平移,中最复杂的一种了。大家应该都听过,有一种旋转的表示方法叫四元数。按照我们的习惯,我们更加熟悉的是另外两种旋转的表示方法——矩阵旋转和 欧拉旋转 。矩阵旋转使用了一个4*4大小的矩阵来表示绕任意轴旋转的变换矩阵,而欧拉选择则是按照一定的坐标轴顺序(例如先x、再y、最后z)、每个轴旋转一定角度来变换坐标或向量,它实际上是一系列坐标轴旋转的组合。 那么, 四元数 又是什么呢?简单来说,四元数本质上是一种高阶复数(听不懂了吧。。。),是一个四维空间,相对于复数的二维空间。我们高中的时候应该都学过复数,一个复数由实部和虚部组成,即x = a + bi,i是虚数单位,如果你还记得的话应该知道i^2 = -1。而四元数其实和我们学到的这种是类似的,不同的是,它的虚部包含了三个虚数单位,i、j、k,即一个四元数可以表示为x = a + bi + cj + dk。那么,它和旋转为什么会有关系呢? 在Unity里,tranform组件有一个变量名为rotation,它的类型就是四元数。很多初学者会直接取rotation的x、y、z,认为它们分别对应了Transform面板里R的各个分量。当然很快我们就会发现这是完全不对的

扩展欧拉定理

自作多情 提交于 2020-01-22 21:18:03
欧拉定理 若 \(gcd(a,m)=1\) ,则 \(a^{φ(m)}≡1\ (mod\ m)\) 扩展欧拉定理 若 \(b\geqslant φ(m)\) ,则 \(a^b≡a^{b\ mod\ φ(m)+φ(m)}\ (mod\ m)\) 利用扩展欧拉定理,可以处理快速幂取模,例如 【模板】欧拉定理 和 上帝与集合的正确用法 \(a^b \bmod m\) \(code:\) ll qp(ll x,ll y) { ll ans=1; while(y) { if(y&1) ans=(ans*x)%m; x=(x*x)%m; y>>=1; } return ans%m; } ll get_phi(ll x) { ll ans=x; for(int i=2;i<=sqrt(x);++i) { if(x%i) continue; ans=ans*(i-1)/i; while(x%i==0) x/=i; } if(x>1) ans=ans*(x-1)/x; return ans; } ...... for(int i=1;i<=len;++i) { b=((b<<1)+(b<<3)+(str[i]^48)); if(b>=phi) b%=phi,flag=true; } if(flag) b+=phi; printf("%lld",qp(a,b)); 来源: https://www