// 最大公约数(欧几里得算法)
public static int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
// 最小公倍数(利用 GCD)
public static int lcm(int a, int b) {
return a / gcd(a, b) * b;
}
// 判断是否是素数(试除法,适合 <= 1e6 的数)
public static boolean isPrime(int n) {
if (n <= 1) return false;
if (n == 2) return true;
if (n % 2 == 0) return false;
for (int i = 3; i * i <= n; i += 2) {
if (n % i == 0) return false;
}
return true;
}
// 判断是否是闰年
public static boolean isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
// 埃氏筛法:生成 <= n 的所有素数
public static boolean[] sieve(int n) {
boolean[] isPrime = new boolean[n + 1];
Arrays.fill(isPrime, true);
isPrime[0] = isPrime[1] = false;
for (int i = 2; i * i <= n; i++) {
if (isPrime[i]) {
for (int j = i * i; j <= n; j += i) {
isPrime[j] = false;
}
}
}
return isPrime;
}