数论基础
欧几里得算法
判断两个非负整数的最大公约数。
描述:
计算两个非负整数p和q的最大公约数:若q是0,则最大的公约数是p。否则,将p除以q得到余数r,p和q的最大公约数即为q和r 的最大公约数。
public static int gcd(int p,int q){
if(q == 0)return p;
int r = p % q;
return gcd(q,r);
}
素数
素数是只能被1和它本身整除的数,判断一个数是否为素数。
描述
判断一个数是否为素数:若素数为n,则判断在n/2个数中是否有n的因子,没有则为素数。
public static bool isprime(int n){
if(n <= 1) return false;
for(int i = 2; i <= sqrt(n); i++){
if(n / i == 0) return false;
}
return true;
}
数的分解
将一个正整数分解成自然数。
描述
i为2019,i % 10 为 9 ,i / 10 为201,通过循环依次分解。
int digits(int i){
int t;
while(i){
t = i % 10;
cout<<t<<" ";
i /= 10;
}
return 0;
}
两点间距
描述
判断一个探测器在一个矩阵中能探测到多少个点。
//x,y,为探测器坐标,a为矩阵数组,r为探测半径
void idstance(int x,int y,int a,int r){
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++){
int r1 = sqrt((x - i)*(x - i) + (y - j)*(y - j));
if(r1 <= r) a[i][j] = 1;//标记探测点
}
}
判断闰年
bool is(int n){
if(n % 400 == 0 || (n % 4 == 0 && n % 100 != 0)
return true;
return false;
}