欧拉定理、欧拉函数、a/b%c

 

怕忘了……

 

欧拉函数 定义、证明、打表方法

欧拉定理 定义、证明

https://blog.csdn.net/zzkksunboy/article/details/73061013

剩余系、完系、简系

证明相当精彩!

而1~a*b中关于a*b的每个系有且仅有一个。


勿忘:积性函数指对于所有互质的整数a和b有性质f(ab)=f(a)f(b)的数论函数。

 

====================================================================

 

https://blog.csdn.net/u014074562/article/details/50990326

 

 

a^b%c

在b非常大时的情况,

 

[前提 (a,c)=1]

因为a^phi(c)%c = 1

a^b%c=a^(b%phi(c))%c

 

c为素数时,phi(c)=c-1。

 

[无前提]

b>=phi(c)时,a^b%c=a^(b%phi(c)+phi(c))%c

b<phi(c)时,a^b%c=a^(b%phi(c))%c (前面的定理不一定正确)

证明:

https://www.luogu.org/problemnew/solution/P5091

 

例子:

a=d c=d^e b=d^f e>f

如a=2 b=1024 c=2

 

P5091 【模板】欧拉定理

 1 #include <cstdio>
 2 #include <cstdlib>
 3 #include <cmath>
 4 #include <cstring>
 5 #include <string>
 6 #include <algorithm>
 7 #include <iostream>
 8 using namespace std;
 9 #define ll long long
10 
11 const double eps=1e-8;
12 const ll inf=1e9;
13 const ll mod=1e9+7;
14 const int maxn=1e6+10;
15 //const int maxlen=2e7+10;
16 
17 int phi[maxn],zhi[maxn],cnt_zhi;
18 bool vis[maxn];
19 int maxv=1e6;
20 //char str[maxn];
21 
22 ll mul(ll a,ll b,ll m)
23 {
24     ll y=1;
25     while (b)
26     {
27         if (b&1)
28             y=y*a%m;
29         a=a*a%m;
30         b>>=1;
31     }
32     return y;
33 }
34 
35 int main()
36 {
37     ///互质:它们的公因数只有1
38     ///i=1~m的phi(i) 顺便求出
39 
40     bool use=0;
41     int i,j,k,a,b,m;
42     char c;
43     phi[1]=1;///
44     for (i=2;i<=maxv;i++)
45     {
46         if (!vis[i])
47         {
48             zhi[++cnt_zhi]=i;
49             phi[i]=i-1;
50         }
51         for (j=1;j<=cnt_zhi;j++)
52         {
53             k=i*zhi[j];
54             if (k>maxv)
55                 break;
56             vis[k]=1;
57             if (i%zhi[j]==0)
58             {
59                 phi[k]=phi[i]*zhi[j];
60                 break;
61             }
62             else
63                 phi[k]=phi[i]*(zhi[j]-1);
64         }
65     }
66 
67 
68     scanf("%d%d ",&a,&m);
69     b=0;
70     while ((c=getchar())!=EOF)
71     {
72         if (!(c>=48 && c<=57))
73             break;
74 
75         b=b*10+c-48;
76         if (b>=phi[m])
77             use=1;
78         b=b%phi[m];
79 //        b=(b*10+c-48)%phi[m];
80     }
81 
82     if (use)
83         printf("%lld",mul(a,b+phi[m],m));
84     else
85         printf("%lld",mul(a,b,m));
86     return 0;
87 }
88 /*
89 2 12 8
90 2 5 3
91 */

 

Advanced:

学习 快速幂&龟速乘&快速乘

https://blog.csdn.net/Cyan_rose/article/details/83065026

 

------------------------------------

 

a/b%c

 

b,c互质

则a/b 与 a^[phi(c)-1] 模c的结果是一致的 [a^phi(c) mod c = 1]

a/b%c=a^[phi(c)-1]%c

 

对于任意情况:

针对的a是特别大,b、c较小的情况

a/b%c=(a%bc)/b

证明:把a设为bc*x + b*y +z的形式 (x尽量大,然后是y尽量大,x,y,z>=0)

 

 

=============================

 

最后推荐:

https://www.cnblogs.com/zwfymqz/p/6740325.html

 

一些数论题目的模板

 

posted @ 2019-07-24 10:20  congmingyige  阅读(497)  评论(0编辑  收藏  举报