欧拉定理

欧拉工程第四十一至五十题解题思路分析

时光总嘲笑我的痴心妄想 提交于 2019-12-03 23:13:56
四十一、全数字素数(pandigital prime) 当一个N位数的数字各个数位分别使用了1至N所有的数字,我们就说这是一个N位的全数字。例如,2143是一个四位的全数字,同时还是一个素数。求最大的同时为素数和N位全数字的数。 分析:小学的时候我们都已经学过,当一个数字的所有数位之和是三的倍数,则这个数可以被三整除,因此不可能是一个素数。我们可以试着计算所有两位数以上的全数字各位数之和: \[ \begin{aligned} 1+2&=3\\ 1+2+3&=6\\ 1+2+3+4&=10\\ 1+2+3+4+5&=15\\ 1+2+3+4+5+6&=21\\ 1+2+3+4+5+6+7&=28\\ 1+2+3+4+5+6+7+8&=36\\ 1+2+3+4+5+6+7+8+9&=45 \end{aligned} \] 我们可以很明显看到,只有四位和七位全数字的各位数之和不是三的倍数,因此只有这两个数位的全数字中可能存在素数。考虑到七位数必然大于四位数,所以我们从最大的七位全数字7654321开始筛选,依次寻找一个更小的素数,然后判断这个素数是否为全数字。判断的方法是检查该数字对应的字符串构成的集合是否等于由字符串1234567构成的集合,如果等于则是一个全数字,如果不等于就不是。我们首先在七位数的范围内寻找满足要求的数,如果找不到,再在四位数范围内寻找。经过尝试

广义欧拉降幂(欧拉定理)――bzoj3884,fzu1759

匿名 (未验证) 提交于 2019-12-02 23:42:01
广义欧拉降幂对于狭义欧拉降幂任然适用 https://blog.csdn.net/qq_37632935/article/details/81264965?tdsourcetag=s_pctim_aiomsg bzoj388 #include<bits/stdc++.h> using namespace std; #define ll long long ll Pow(ll a,ll b,ll p){ ll res=1; while(b){ if(b%2) res=res*a%p; b>>=1;a=a*a%p; } return res; } ll phi(ll x){ ll res=x,tmp=x; for(ll i=2;i*i<=tmp;i++) if(tmp%i==0){ res=res*(i-1)/i; while(tmp%i==0)tmp/=i; } if(tmp>1) res=res*(tmp-1)/tmp; return res; } ll f(ll p){ if(p==1)return 0; ll q=phi(p); return Pow(2,q+f(q),p); } int main(){ int t;ll p;cin>>t; while(t--){ cin>>p; cout<<f(p)<<'\n'; } } View Code #include<iostream

欧拉反演?

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-02 12:57:38
大意是:求证 \[\sum_{d|n} \varphi(d)=n\] 定理①: \[\sum_{z|mn}\varphi(z)=\sum_{x|m}\varphi(x)\sum_{y|m}\varphi(y)(\gcd(m,n)=1)\] 有 \(\sum\) 在里面不太好看,设 \(m\) 的所有因数为: \(a_1,a_2...a_k\) , \(n\) 的所有因数为: \(b_1,b_2...b_l\) 乘起来后易得: \[\sum\limits_{i=1}^k\sum\limits_{j=1}^l\varphi(a_i)\varphi(b_j)=\sum_{x|m}\varphi(x)\sum_{y|m}\varphi(y)=\sum_{z|mn}\varphi(z)\] 所以该结论成立。 定理②: \[\varphi(a^b)=a^b-a^{b-1}\] 其中 \(a\) 是质数。 在 \([1,a^b]\) 中,只有 \(a\) 的倍数与 \(a^p\) 不互质共有 \(a^{b-1}\) 个 所以该结论成立。 运用该结论,我们知道 \(\sum_{d|p^m}\varphi(d)=\varphi(1)+\varphi(p)+...+\varphi(p^m)\) ( \(p\) 是质数) \(=1+\sum\limits_{i=1}^m(p^i-p^{i-1})\) \

欧拉函数(欧拉定理)与费马小定理

♀尐吖头ヾ 提交于 2019-12-02 03:39:06
详细的证明忽略。只记录使用场景。 欧拉函数 欧拉函数 是小于等于 n 的正整数中与 n 互质的数的个数。 欧拉定理 使用条件为a和n互质,即gcd(a,n)=1 对于任意互素的 ,有 方法1:求单个数的欧拉函数 我们首先应该要知道欧拉函数的通项公式:φ(n)=n*(1-1/p1)*(1-1/p2)*(1-1/p3)*(1-1/p4)…..(1-1/pn),其中pi为n的质因数 long long eular(long long n) { long long ans = n; for(int i = 2; i*i <= n; i++) { if(n % i == 0) { ans -= ans/i; //等价于通项,把n乘进去 while(n % i == 0) //确保下一个i是n的素因数 n /= i; } } if(n > 1)ans -= ans/n; //最后可能还剩下一个素因数没有除 return ans; } 方法2: 打表求欧拉函数 void euler() { for(int i=2;i<maxn;i++){ if(!phi[i]) for(int j=i;j<maxn;j+=i){ if(!phi[j]) phi[j]=j; phi[j]=phi[j]/i*(i-1); } } } 方法3: 欧拉筛素数同时求欧拉函数 void get_phi() { int i,

ACM周末学习总结

风流意气都作罢 提交于 2019-12-01 03:42:08
今天看了一些题,但着实不是好题,只是对知识的应用,有欧拉定理,扩展欧几里得,容斥定理,博弈论等内容,就没有记录下来。但是当我反问自己学到了什么,我感觉是很模糊的,首先是因为题目本身比较简单,基本上看出用什么知识点解决就可以直接套板子,关于板子的变形比较少,需要注意的就只是特判0和1等。 以前做题时接触过切比雪夫定理,那道题给出了切比雪夫定理的百度百科,但是我没用上。直接自己手推得公式推了老久做的,现在一看,这个定理完全可以作为知识的储备。 还有新知识卡特兰数,开始搞吧。 来源: CSDN 作者: 狠人王 链接: https://blog.csdn.net/weixin_43238423/article/details/102247272

【题解】 由乃(思博+欧拉定理+搜索)

99封情书 提交于 2019-11-30 16:38:02
【题解】 由乃(思博+欧拉定理+搜索) darkbzoj 集合这样的集合划分然后相等的问题就是NP问题,下界就是指数,所以要考虑一些性质。 我们现在只考虑 \(v=1000\) 的情况。由于所有序列中的数对 \(v\) 取膜,所以考虑当查询的区间大于长度等于 \(v-1\) 时,问题一定有解,因为此时要么有一个数出现了两次,要么出现了 \(0\) 。 考虑把范围再缩小一点,我们知道 \(\log_{3}1000=6.8\) ,所以当查询区间大于等于$2\lceil 6.8 \rceil =7 \(时也是必定存在有解的,所以现在只需要考虑\) len\le 13$的情况了。 然后 \(len \le 13\) 的情况直接双向搜索。复杂度$O(2n3^{7}+n \log n) $ 修改操作相当于求 \(x^{3^k}\) ,直接欧拉定理。 不要看了题解觉得很简单就去rush,先去看题... //@winlere #include<tr1/unordered_map> #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; typedef long long ll; using namespace std::tr1;

【数论】——欧拉定理

淺唱寂寞╮ 提交于 2019-11-29 12:00:48
今天摸鱼看到一道题: 这不就快速幂裸题吗?? 然后一看数据范围: ???这个b的范围吓到我了 经过一番学习,原来这道题考察的是: 欧拉定理&扩展欧拉定理 证明略过,直接上结论: (图源OI wiki) 那么这道题就是先处理出欧拉函数,再根据扩展欧拉求解即可。注意b要 边输入边取模 。 欧拉函数的处理方式:   类似于线性筛素数,看标程即可,很好理解。 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const ll M=1e6+10; 5 ll ans[M],phi[M]; 6 ll cnt; 7 ll m,a,b; 8 void Eulersieve(){ 9 phi[1]=1; 10 for(ll i=2;i<=m;i++){ 11 if(!phi[i]){ 12 for(ll j=i;j<=m;j+=i){ 13 if(!phi[j]) phi[j]=j; 14 phi[j]=phi[j]/i*(i-1); 15 } 16 } 17 } 18 } 19 ll read(){ 20 ll x=0,f=1; 21 char c=getchar(); 22 while(!isdigit(c)){ 23 if(c=='-') f=-1; 24 c=getchar(); 25 } 26

欧拉定理

Deadly 提交于 2019-11-29 04:57:32
一. 分解质因数   每个合数都可以写成几个质数相乘的形式,其中每个质数都是这个合数的因数,把一个合数用质因数相乘的形式表示出来,叫做分解质因数。如30=2×3×5 。分解质因数只针对合数。求一个数的质因数,要从最小的质数除起,一直除到结果为质数为止。分解质因数的算式叫短除法,和除法的性质相似,还可以用来求多个数的公因式。(百科) const int MAXN = 100010; int prime[MAXN] = {0}; bool isprime[MAXN] = {0}; int id = 0; void getPrime() //素数筛法 { for (int i = 2; i < MAXN; i++) { if (!isprime[i]) prime[id++] = i; for (int j = 0; j < id && i * prime[j] <= MAXN && i * prime[j] != 0; j++) isprime[i * prime[j]] = 1; } } void getPrimeFactor(int n) //分解质因数,递归输出素因子 { getPrime(); if (n < 2) return; if (!isprime[n]) cout << n; else { for (int i = 0; prime[i] < n; i++) if

欧拉系列学习笔记

纵然是瞬间 提交于 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 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\) 那么推广到全部即可; 实现 ​ 我们可以枚举其质因数,不用素数筛