A=p1^a * p2^b * p3^c(其中p1,p2,p3为A的质因子)
..............
例:http://acm.hdu.edu.cn/showproblem.php?pid=4990
ax+by=gcd(a,b)=1, x为a的逆元 y为b的逆元;
int exgcd(int a,int b,int &x,int &y)
{
int d=a;
if(d==0)
{
x=1;
y=0;
}
else
{
d=exgcd(b,a%b,y,x);
y-=a/b*x;
}
return d;
}
//求ax=1 (mod m)
int get_number(int a,int mod)
{
int x,y;
int temp=exgcd(a,mod,x,y);//另ax+by=1 中的a=a b=mod;;
if(temp!=1)
{
printf("-1\n");//不存在
}
else printf("%d\n",x);//a的逆元为x;
}
对任意的P,A互质,都有A的(P-1)次方取模与P等于1,公式表示为:
A^p-1≡1(mod P)
A*X≡1(mod p) 两式得出A的逆元X=A^p-2(快速幂计算)
注:此时满足P,A互质(p为质数常用)
ax=b (mod m)------>ax-my=b 令d=exgcd(a,m,x,y)
则 x=x0 * b/d 为方程一解 mod=m/d (解集:x=x0*b/d+k*mod);
非负最小解:x=(x%mod+mod)%mod(如果x==0 x+=mod);
例:http://poj.org/problem?id=2115
例:http://poj.org/problem?id=1061
结合唯一分解定理 M=(e1+1)*(e2+1)*...*(en+1)
以及公式 ei=[N/pi^1]+ [N/pi^2]+ …… + [N/pi^n] 其中pi为n以内的素数,ei当n!在
分子为正 分母为负
例:http://poj.org/problem?id=2992
void euler(int n)//求n的欧拉函数值
{
int ans=n,temp=n;
for(int i=2;i*i<=temp;i++)
{
if(n%i==0)//i为素数 且是n的因子
{
ans=ans-ans/i;
while(n%i==0) n/=i;
}
}
if(n>1) ans=ans-ans/n;
return ans;
}
//欧拉函数的筛选法
int phi[maxn+10];
void get_phi()
{
for(int i=0;i<=maxn;i++) phi[i]=i;
for(int i=2;i<=maxn;i++)
{
if(phi[i]==i)
{
for(int j=i;j<=maxn;j+=i)
{
phi[j]=phi[j]/i*(i-1);
}
}
}
}
#include
#include
#include
#include
using namespace std;
typedef long long ll;
ll mulit(ll a,ll b,ll m){
ll ans=0;
while(b){
if(b&1) ans=(ans+a)%m;
a=(a<<1)%m;
b>>=1;
}
return ans;
}
ll quick_mod(ll a,ll b,ll m){
ll ans=1;
while(b){
if(b&1){
ans=mulit(ans,a,m);
}
a=mulit(a,a,m);
b>>=1;
}
return ans;
}
ll comp(ll a,ll b,ll m){
if(aa-b) b=a-b;
ll ans=1,ca=1,cb=1;
for(int i=0;i>a>>b>>m){
cout<
#include
#include
#include
#include
using namespace std;
typedef long long ll;
ll exgcd(ll a,ll b,ll& x,ll& y){
if(a%b==0){
x=0,y=1;
return b;
}
ll r,tx,ty;
r=exgcd(b,a%b,tx,ty);
x=ty;
y=tx-a/b*ty;
}
ll comp(ll a,ll b,ll m){
if(aa-b) b=a-b;
ll ans=1,ca=1,cb=1;
for(int i=0;i>n;
while(n--){
cin>>a>>b>>m;
cout<