1.最大公约数(GCD)
int gcd(int x, int y)
{
int z = y;
while(x%y!=0)
{
z = x%y;
x = y;
y = z;
}
return z;
}
使用递归实现:
int gcd(int a, int b)
{
return b==0?gcd(b,a%b);
}
原理是欧几里得算法gcd(a,b)=gcd(b,a%b)
2.最小公倍数(LCM)
a*b/gcd(a,b)
3.快速幂
long long ppow(long long x,long long n)
{
long long res=1;
while(n>1)
{
if(n&1) res*=x;
x*=x;
n>>=1;
}
return res;
}
4.素数筛法
const int maxn=101;
int prime[maxn],pNum=0;//prime数组存放所有素数,pNum为素数个数
bool p[maxn]={0};
void Find_Prime()
{
for(int i=2;i<maxn;i++){
if(p[i]==false){
prime[pNum++]=i;
for(int j=i+i;i<maxn;j+=i)//筛去所有i的倍数
p[j]=true;
}
}
}
//也可用循环1-sqrt(n)的方式判断某一数是否为质数,从而求出质数表
分解质因子:
1.枚举1-sqrt(n)的所有素数p,判断p是否为n的因子,不断除以p求幂指数
2.若上述步骤结束后n!=1,则此时n也为一个质因子(>sqrt(n))
等待更新中…