欧拉定理

习题:Huge Mods(欧拉定理)

你。 提交于 2019-12-05 11:29:21
题目 传送门 思路 挺好的一道拓展欧拉定理的板子题 我们已知 \(a^b\%m=a^{b\%\varphi(m)+\varphi(m)}\%m\) 当然此时 \(b>=\varphi(m)\) 也就是说,我们可以从上至下的一层一层的算, 但是每一层的模数是不一样的 具体来说第i层的模数是 \(\varphi\varphi... m\) ,i-1个 \(\varphi\) \(a^{b^c}\%m=a^{b^{c\%\varphi(\varphi(m))+\varphi(\varphi(m))}\%\varphi(m)+\varphi(m)}\%m\) 代码 #include<iostream> #include<cstdio> using namespace std; int tot; long long mod; long long n; long long a[15]; long long ex_oular(long long x,long long mod) { if(x>=mod) return x=x%mod+mod; else return x; } long long qkpow(long long a,long long b,long long mod) { if(b==0) return 1; if(b==1) return a; long long t

数学知识目录

我的未来我决定 提交于 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

POJ-3696 欧拉定理 公式推导

六眼飞鱼酱① 提交于 2019-12-04 16:01:40
题目链接: https://vjudge.net/problem/POJ-3696 题目大意:给定一个数L,问是否存在这样的kL=88...888,求最小的全是8的数的长度,如果无法构造,输出0 题解思路: 全是8的数可以表示为 分离分母之后等式变为: 而 是99999这样的数,是9的倍数,要让这个等式成立,唯一分解后的L中质因子2的数量必然小于等于3,如果小于3,就把左右两式子中这部分约去,可得: gcd变形可得: 设p= q= 等式为: ,其中p和q互质,且p<q 要让等式成立则必有: 其中k,m,x为未知量,要消去m,x对等式的影响,可以同时对一个已知的数取模 可得: 移项得: 由欧拉定理可知: (10和q互质) 如果 则 必然无解,输出0 如果互质的话,那么10的指数在 mod q 的条件下的循环节的上限就是 我们需要枚举所有 的因子,挑出最小的满足 的因子 在实现上需要注意的是这里的q会非常大,相对的其欧拉函数也会比较大,需在mod q意义下快速幂计算10^k,并且这里为了防止爆longlong,要手写快速乘。 #include <iostream> #include <vector> #include <cstdio> #include <algorithm> #include <cstring> #include <map> using namespace std;

欧拉定理的应用hdu2462,hdu1395

泄露秘密 提交于 2019-12-04 15:55:03
欧拉定理:a^x 1(mod m),那么 x = euler(m); The Luckist Number 题意:输入一个n,求能够整除n只由8组成的数的最小的位数; 思路:题目等价于满足(10^x - 1)/ 9 * 8 == n * p,其中p为整数,的x的最小值,n的范围2 * 10 ^ 9; 刚开始的时候,想直接把1,11,111,1111,……打一个表打到2*10^9,之后对输入的n进行除2,觉得除完除完之后就剩下了1,11,111,之类的数;然后再判断符合数组的哪个数,输出这个数的位数;然而,对于一个样例,就把这个想法推翻了,如输入3 的时候,输出的是3,因为888%3 == 0,所以不能采用这种方法,还是得重新推; 推导分析: (10^x - 1)/ 9 * 8 == n * p ; 则10^x - 1 == n * p / 8 * 9; l令m == 9*n / gcd(n,8); 那么(10^x - 1)== m * p' ; 可以得到10 ^ x 1 (mod m); 可以知道,当m 和 10不互质的时候,肯定不符合答案; 然后x == euler(m),然后答案就是满足这个方程的是euler(m)的因数的最小的值; 在找满足方程的euler(m)的最小因数的时候为了防止超时,可以从访问到一半的位置,之后再进行除法进而判断后面的数的情况; #include

POJ 3696 : The Luckiest number - 欧拉函数,快速幂[数论好题]

拟墨画扇 提交于 2019-12-04 15:52:33
题意: Bob最喜欢的数字是8,他的幸运数字是能整除L的全8序列的最短长度。 请找到Bob的幸运数字,若无则输出0 例如:L=1,ans=1;L=2,ans=1;L=8,ans=1;L=11,ans=2. 分析: 注意到凡是那种1111111..... 2222222..... 33333..... 之类的序列都可用这个式子来表示:k*(10^n-1)/9 进而简化: 8 * (10^n-1)/9=L * k (k是一个整数) -->8 * (10^n-1)=9L * -->d=gcd(8,L) 8*(10^n-1)/d=9k * L/d -->令p=8/d q=9kL/d p*(10^n-1)=q --->因为p,q互质, 10^n=1 mod q 由欧拉定理可知,当q与10互质的时候,10^(phi(q))=1 mod q 所以无解的时候就是q与10不互质的时候,此外我们求phi(q)的所有因子,按小到大排序,第一个满足10^x =1 mod q的输出。 3696 Accepted 704K 188MS G++ 1172B #include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #include<cmath> #define LL long long using namespace

数论 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哈哈哈哈是这个音来着

POJ3696【欧拉函数+欧拉定理】

女生的网名这么多〃 提交于 2019-12-04 15:43:04
题意: 求最小T,满足L的倍数且都由8组成,求长度; 思路: 很强势的福利: 点 图片拿出去食用更优 //#include<bits/stdc++.h> #include<cstdio> #include<math.h> #include<string.h> #include<algorithm> using namespace std; typedef long long LL; LL eluer(LL n) { LL res=n,a=n; for(LL i=2;i*i<=a;i++) if(a%i==0) { res=res/i*(i-1); while(a%i==0) a/=i; } if(a>1) res=res/a*(a-1); return res; } LL multi(LL x,LL y,LL mod) { LL ans=0; while(y) { if(y&1) ans=(ans+x)%mod; x=(x<<1)%mod; y>>=1; } return ans; } LL quickmul(LL x,LL g,LL mod) { LL ans=1; while(g) { if(g&1) ans=multi(ans,x,mod)%mod; x=multi(x,x,mod)%mod; g>>=1; } return ans; } int main() { int

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