标签:时间 等于 分解质因数 else alt one event 质因数 inline
整数a对模数p之模逆元存在的充分必要条件是a和p互素,若此模逆元存在,在模数p下的除法可以用和对应模逆元的乘法来达成,此概念和实数除法的概念相同。
模意义下的逆元就好比实数运算中的倒数,模意义下除以一个数就相当于乘上这个数的逆元,就可以实现模意义下的除法啦!
ll pri[10000002],top,phi[10000002],sum[10000002];
bool pd[10000002];
void prime_shaker()
{
phi[1]=1;
for(ll i=2;i<=n;i++)
{
if(!pd[i])pri[++top]=i,phi[i]=i-1;
for(ll j=1;j<=top&&pri[j]*i<=n;j++)
{
pd[i*pri[j]]=true;
if(i%pri[j]==0)
{
phi[i*pri[j]]=phi[i]*pri[j];
break;
}
else phi[i*pri[j]]=phi[i]*phi[pri[j]];
}
}
for(int i=1;i<=n;i++)sum[i]=sum[i-1]+phi[i];
}
phi(a*b)=phi(a)*phi(b)
if(a,p)=1,a^n=a^(n mod phi(p))modp
因为(a,p)=1
所以x1*x2*...*(xphi(p))==(a*x1)*......*(a*xphi(p))(mod p)
令X=x1*x2*....*xphi(p)
可得X==X*a^phi(p)(mod p)即a^phi(p)==1(mod p)
inline void prime_shaker(int n)
{
phi[1]=1;
for(int i=2;i<=n;i++)
{
if(!pd[i])prime[++top]=i,phi[i]=i-1;
for(int j=1;j<top&&1ll*prime[j]*i<=n;j++)
{
pd[i*prime[j]]=1;
if(i%prime[j]==0)
{
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
else phi[i*prime[j]]=phi[i]*phi[prime[j]]
}
}
}
标签:时间 等于 分解质因数 else alt one event 质因数 inline
原文地址:https://www.cnblogs.com/maoyingcheng/p/11255874.html