欧拉函数定义-性质-应用(费马小定理)

典型例题:51nod  1135  原根

设m是正整数,a是整数,若a模m的阶等于φ(m),则称a为模m的一个原根。(其中φ(m)表示m的欧拉函数)

给出1个质数P,找出P最小的原根。

Input

输入1个质数P(3 <= P <= 10^9)

Output

输出P最小的原根。

Input示例

3

Output示例

2



欧拉公式:含义:欧拉函数就是指:对于一个正整数n,小于n且和n互质的正整数(包括1)的个数,记作φ(n)

通式:


其中p1, p2……pn为x的所有质因数,x是不为0的整数


φ(1)=1(唯一和1互质的数(小于等于1)就是1本身)


注意:每种质因数只一个。 比如12=2*2*3那么φ(12)=12*(1-1/2)*(1-1/3)=4


性质① m是素数时,有φ(m)=m-1性质② 当m、n互素时,φ(m*n)=φ(m)*φ(n)性质③ 对一切正整数n,有φ(p^n)=[p^(n-1)]*(p-1)

欧拉函数性质(持续更新):

若n是质数p的k次幂,φ(n)=p^k-p^(k-1)=(p-1)p^(k-1),因为除了p的倍数外,其他数都跟n互质。

φ(n)是积性函数,当gcd(n,m)==1时,φ(nm)=φ(n)*φ(m)

①N>1,不大于N且和N互素的所有正整数的和是 1/2*M*eular(N)。

②若(N%a==0 && (N/a)%a==0) 则有:E(N)=E(N/a)*a;

③若(N%a==0 && (N/a)%a!=0) 则有:E(N)=E(N/a)*(a-1);

 费马小定理(Fermat‘s little theorem) 数论中的一个重要定理,其内容为: 假如p是质数,且gcd(a,p)=1,那么 a(p-1)≡1(mod p),即:假如a是整数,p是质数,且a,p互质(即两者只有一个公约数1),那么a的(p-1)次方除以p的余数恒等于1。

还有些定理:http://blog.csdn.net/yxuanwkeith/article/details/52387873

题目:

给定阶的含义为:设a模m的阶为k,则k满足a^k%m==1,且k最小

题解:

因为这题的p为质数,所以φ(p)=p-1,那么这题就是要找到最小的a使得a^(p-1)%p==1,且对于所有的k∈[0,p-1)都

不满足a^k%p等于1,(根据费马小定理,对于所有的正整数a,a^(p-1)%p==1一定成立)

方法就是枚举a,对于每一个a判断是否满足条件,可k的范围特别的大,枚举k不实际,那怎么办?其实我们只需要

枚举p-1的因数即可,只要p-1的所有因数都满足其不是a的阶,p-1即是a的阶

http://blog.csdn.net/acdreamers/article/details/8883285(大佬的题解)

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 using namespace std;
 5 typedef __int64 ll;
 6
 7 int a[111];
 8
 9 int pow_mod(int x, int n, int mod) {
10     int ret = 1;
11     while(n) {
12         if(n & 1)   ret = (ll)ret*x%mod;
13         x = (ll)x*x%mod;
14         n >>= 1;
15     }
16     return ret;
17 }
18
19 int main() {
20     int n;
21     while(scanf("%d", &n) != -1){
22         int tmp = n-1, tot = 0;
23         for(int i = 2;i*i <= tmp ;i++) if(tmp % i == 0) {
24             a[tot++] = i;
25             while(tmp % i == 0) tmp /= i;
26         }
27         if(tmp > 1) a[tot++] = tmp;
28         tmp = n-1;
29         for(int i = 2;i < n; i++) {
30             bool flag = 1;
31             for(int j = 0;j < tot; j++) {
32                 if(pow_mod(i, tmp/a[j], n) == 1) {
33                     flag = 0; break;
34                 }
35             }
36             if(flag) {
37                 printf("%d\n", i); break;
38             }
39         }
40     }
41     return 0;
42 }
时间: 2024-10-10 11:21:25

欧拉函数定义-性质-应用(费马小定理)的相关文章

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

对于正整数n,欧拉函数是小于等于n的正整数中与n互质的数的数目,表示为φ(n). 性质1:对于素数p,φ(p)=p-1. 性质2:对于两个互质数p,q,φ(pq)=φ(p)*φ(q)=(p-1)(q-1).(积性函数)(待证) 性质3:若n是质数p的k次幂,φ(n)=pk-pk-1=(p-1)pk-1,因为除了p的倍数外,其他数都跟n互质. 性质4: 因为:x可以分解成p1q1×p2q2×p3q3--×pnqn (pi为x的质因数) 因为piqi两两互质,所以:φ(x)=φ(p1q1)×φ(p2

费马小定理及欧拉函数

2016.1.26 对于m=p1e1 . p2e2 . p3e3 . …… . pnen 欧拉函数定义为φ(m)=m * ∏(pi – 1)/pi 其意义为不超过m并且和m互素的数的个数 特别的φ(1)=1 对于和m互素的x,有xφ(m)≡1(mod m) 特别的,当p为素数时,x无法被p整除,φ(p)=p-1,于是便有费马小定理Xp-1≡1(mod p) 在p是素数时,对任意正整数x都有Xp≡X(mod p) 于是对于a的逆元x,有ax≡1(mod m),对于a,m互素时,有x=am-2,于是

数论一(欧拉函数+费马小定理)

一.欧拉函数 1.定义:对于正整数n,欧拉函数φ(x)是求小于n中与n互质的数字的数目. 2.公式: φ(x)=x(1-1/p(1))(1-1/p(2))(1-1/p(3))(1-1/p(4))-..(1-1/p(n)) 其中p(1),p(2)-p(n)为x 的所有质因数;x是正整数; φ(1)=1(唯一和1互质的数,且小于等于1).注意:每种质因数只有一个. 3.代码实现: //求小于等于n且与n互质的数字的个数 int Euler(int n) { int i,ans=n; for(i=2;

费马小定理,欧拉函数

在证明这些定理之前先证明一个有意思的定理. 对于0 mod m,n mod m , 2n mod m, 3n mod m, 4n mod m... (m-1)n mod m 对应解集序列 一定有 m/d份 0 d 2d 3d..m-d. (不一定按照顺序) 这样的解. 其中d = gcd(n,m) 具体点:n=8,m=12.  d = gcd(n,m)=4 对于 0 mod 12,8 mod 12,16 mod 12,24 mod 12,32 mod 12,40 mod 12...88 mod

【日常学习】乘法逆元&amp;&amp;欧拉定理&amp;&amp;费马小定理&amp;&amp;欧拉函数应用&amp;&amp;常大学霸

转载请注明出处 [ametake版权所有]http://blog.csdn.net/ametake欢迎来看看 今天花了一个多小时终于把乘法逆元捣鼓明白了 鉴于我拙计的智商抓紧把这些记录下来 在此本栏目鸣谢里奥姑娘和热心网友himdd的帮助和支持 那么正文开始··· 逆元是干什么的呢? 因为(a/b)mod p ≠(a mod p)/(b mod p) 我们需要想一种方法避免高精 那就是把除法转化为乘法 因为(a*b) mod p = ( a mod p ) *( b mod p ) 怎么转化呢?

HDOJ M斐波那契数列 4549【矩阵快速幂+快速幂+费马小定理+欧拉函数】

M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 2096    Accepted Submission(s): 596 Problem Description M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = a F[1] = b F[n] = F[n-1] * F[n-2] ( n > 1 ) 现在给

欧拉函数常用性质

欧拉函数定义:设n 为正整数,则1,2......,n中与n互质的整数个数记作f(n). 1.1 若n为素数,f(n)=n-1; 1.2 整数n=p*q,p,q为不同素数,则f(n)=f(p)*f(q)=(p-1)*(q-1) 1.3 n=p^a*q^b,f(n)=f(p^a)*f(q^b)=n*(1-1/p)*(1-1/q) 1.4 分解质因子相乘,f(n)=n*(1-1/p1)*(1-1/p2)*.......*(1-1/pk). f(100)=f(2^2*5^2)=100*1/2*4/5=

hdu 4549 M斐波拉契 (矩阵快速幂 + 费马小定理)

Problem DescriptionM斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = aF[1] = bF[n] = F[n-1] * F[n-2] ( n > 1 ) 现在给出a, b, n,你能求出F[n]的值吗? Input输入包含多组测试数据:每组数据占一行,包含3个整数a, b, n( 0 <= a, b, n <= 10^9 ) Output对每组测试数据请输出一个整数F[n],由于F[n]可能很大,你只需输出F[n]对1000000007取模后的值即可,

[ACM] hdu 3923 Invoker (Poyla计数,高速幂运算,扩展欧几里得或费马小定理)

Invoker Problem Description On of Vance's favourite hero is Invoker, Kael. As many people knows Kael can control the elements and combine them to invoke a powerful skill. Vance like Kael very much so he changes the map to make Kael more powerful. In