模运算的世界--费马小定理

来源:互联网 发布:excel跨文件数据交互 编辑:程序博客网 时间:2024/06/05 20:41

1.费马小定理

p是素数的情况下,对任意整数x都有x^p=x(mod p),这个定理称为费马小定理。

如果x无法被p整除,我们有x^(p-1)=1(mod p)

上述式子变形后a^(-1)=a^(p-2)(mod p),因此可以通过快速幂运算求出逆元。

在不是素数的情况下,可以有类似的欧拉定理可以使用。m=p1^(e1)*p2^(e2)*p3^(e3)....pn^(en)

合数定理:一个数K能分解成p1^(q1)*p2^(q2)...

那么,这个数的因子个数就是(1+q1)*(1+q2)*...*1+qk


//求欧拉函数值。复杂度O(n½)int euler_phi(int n){    int res=n;    for(int i=2;i*i<=n;i++)    {        if(n%2==0)        {            res=res/i*(i-1);            for(;n%i==0;n/=i);        }    }    if(n!=1)res=res/n*(n-1);    return res;}//O(maxn)时间内·筛出1-n欧拉函数值的表const int maxn=100;int euler[maxn];void euler_phi2(){    for(int i=0;i<maxn;i++)    {        euler[i]=i;    }    for(int i=2;i<maxn;i++)    {        if(euler[i]==i)        {            for(int j=i;j<maxn;j++)euler[j]=euler[j]/i*(i-1);        }    }}


原创粉丝点击