费马定理:

ap≡a(mod p)

其中p为质数,且a不是p的倍数

证明:

。。。。。

 

欧拉定理:

aφ(p)≡1(mod p)

φ(x)(欧拉函数)为小于等于x且与x互质的数的个数

φ(x)=∏(pi-1)*piki-1  其中pi表示 x的质因数,ki表示这种质因数的个数

特别的对于质数  φ(x)=x-1。

欧拉函数的代码实现:

 1 #include<cstdio>
 2 #include<Iostream>
 3 using namespace std;
 4 int ol(int x)
 5 {
 6       int ans=1;
 7       for(int i=2;i*i<=x;++i)
 8       {
 9           if(x%i==0)
10          {
11              x/=i;
12              ans*=i-1;
13          }
14          while(x%i==0)
15         {
16             x/=i;
17              ans*=i;
18          }
19      }
20      if(x>1) ans*=x-1;
21      return ans;
22  }
23  int main()
24  {
25      int a;
26      scanf("%d",&a);
27     printf("%d",ol(a));
28      return 0;
29  }

 

最后函数里那个如果x>1,ans*=x-1一开始让我很懵,后来一想,如果这个数将所有的质因数除过一遍之后,剩下的数如果不是1,那么剩下的肯定只有一个并且是个质数(证明很显然)