九、数据算法
一、数论
1.1、判断质数
2614. 对角线上的质数(20250519更新)
给你一个下标从 0 开始的二维整数数组
nums
。返回位于
nums
至少一条 对角线 上的最大 质数 。如果任一对角线上均不存在质数,返回 0 。注意:
- 如果某个整数大于
1
,且不存在除1
和自身之外的正整数因子,则认为该整数是一个质数。- 如果存在整数
i
,使得nums[i][i] = val
或者nums[i][nums.length - i - 1]= val
,则认为整数val
位于nums
的一条对角线上。
从题目我们能够学到,对角线的坐标i == i
或者是i == nums.length - i -1
。
Java
class Solution {
public int diagonalPrime(int[][] nums) {
int n = nums.length;
int ans = 0;
for (int i = 0; i < n; i++) {
int x = nums[i][i];
if (x > ans && isPrime(x)) { // 用x>ans判断,省去了Math.max的操作
ans = x;
}
int y = nums[i][n - i - 1];
if (y > ans && isPrime(y)) {
ans = y;
}
}
return ans;
}
public boolean isPrime(int n) {
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return false;
}
}
return n >= 2;
}
}
3115. 质数的最大距离(20250519更新)
给你一个整数数组
nums
。返回两个(不一定不同的)质数在
nums
中 下标 的 最大距离。
返回最大的质数的距离,首先我们需要判断整数nums[i]是不是质数。
Java
class Solution {
public int maximumPrimeDifference(int[] nums) {
int i = 0;
while (!isPrime(nums[i])) { // 从左往右找第一个素数
i++;
}
int j = nums.length - 1;
while (!isPrime(nums[j])) { // 从右往左找第一个素数
j--;
}
return j - i;
}
public boolean isPrime(int x) {
for (int i = 2; i * i <= x; i++) {
if (x % i == 0) { // 如果循环x能整除i,表示i是x的因子,表示x不是质数
return false;
}
}
return x >= 2; // 最后判断是否大于等于2, 1不是素数
}
}
1.2、预处理质数
Changelog
6/3/25, 1:49 AM
View All Changelog
d3a6d
-on