数学问题
1.欧几里得及其扩展
线段上格点的个数:
int gcd(int a, int b) //欧几里得辗转相除递归程序,时间O(logmax(a,b))
{
if(b==0) return a; //a,b再一次赋值后,当除数为0返回a,结束
else gcd(b,a%b); //否则a,b,a%b左移,a=b,b=a%b,再一次辗转
}
扩展欧几里得(青蛙的约会)
2.有关素数的算法
判断一个数是否是素数
素数是大于1的数,素数只有1和其本身两个因数
int is_prime(int n) //O(sqrt(n))
{
for(int i=2;i<=sqrt(n);i++)
if(n%i==0) return false;
return n!=1; //1不是素数
}
判断<=n的素数个数
最快的方法是埃式筛法时间复杂度O(nloglogn)近似线性