题目分析
问题描述
给定一个整数数组,要求统计出其中有多少个元素既是素数,且这些素数元素的出现次数也是素数。
关键点
- 素数判断:需要判断一个数是否为素数。
- 元素计数:统计数组中每个元素的出现次数。
- 双重素数判断:既要判断元素本身是否为素数,也要判断该元素的出现次数是否为素数。
解题思路
-
素数判断函数:
- 定义一个函数
is_prime(n)来判断一个数是否为素数。 - 素数的判断逻辑:
- 小于等于1的数不是素数。
- 2是唯一的偶数素数。
- 对于大于2的数,从3开始,逐个检查到该数的平方根,判断是否有其他因数。
- 定义一个函数
-
元素计数:
- 使用
collections.Counter来统计数组中每个元素的出现次数。
- 使用
-
双重素数判断:
- 遍历计数结果,筛选出既是素数的元素。
- 进一步筛选这些素数元素,判断它们的出现次数是否也是素数。
代码实现
def solution(a: list) -> int:
from collections import Counter
import math
def is_prime(n):
if n <= 1:
return False
if n == 2:
return True
if n % 2 == 0:
return False
for i in range(3, int(math.sqrt(n)) + 1, 2):
if n % i == 0:
return False
return True
count = Counter(a)
prime_elements = [num for num in count if is_prime(num)]
result = sum(1 for num in prime_elements if is_prime(count[num]))
return result
if __name__ == '__main__':
print(solution([1, 2, 3, 2, 5, 7, 7, 7, 5]) == 3)
print(solution([1, 4, 6, 8, 10, 12]) == 0)
print(solution([3, 3, 3, 5, 5, 5, 5]) == 1)
```markdown
### 题目分析
#### 问题描述
给定一个整数数组,要求统计出其中有多少个元素既是素数,且这些素数元素的出现次数也是素数。
#### 关键点
1. **素数判断**:需要判断一个数是否为素数。
2. **元素计数**:统计数组中每个元素的出现次数。
3. **双重素数判断**:既要判断元素本身是否为素数,也要判断该元素的出现次数是否为素数。
### 解题思路
1. **素数判断函数**:
- 定义一个函数 `is_prime(n)` 来判断一个数是否为素数。
- 素数的判断逻辑:
- 小于等于1的数不是素数。
- 2是唯一的偶数素数。
- 对于大于2的数,从3开始,逐个检查到该数的平方根,判断是否有其他因数。
2. **元素计数**:
- 使用 `collections.Counter` 来统计数组中每个元素的出现次数。
3. **双重素数判断**:
- 遍历计数结果,筛选出既是素数的元素。
- 进一步筛选这些素数元素,判断它们的出现次数是否也是素数。
### 代码实现
```python
def solution(a: list) -> int:
from collections import Counter
import math
def is_prime(n):
if n <= 1:
return False
if n == 2:
return True
if n % 2 == 0:
return False
for i in range(3, int(math.sqrt(n)) + 1, 2):
if n % i == 0:
return False
return True
count = Counter(a)
prime_elements = [num for num in count if is_prime(num)]
result = sum(1 for num in prime_elements if is_prime(count[num]))
return result
if __name__ == '__main__':
print(solution([1, 2, 3, 2, 5, 7, 7, 7, 5]) == 3)
print(solution([1, 4, 6, 8, 10, 12]) == 0)
print(solution([3, 3, 3, 5, 5, 5, 5]) == 1)
代码解释
-
素数判断函数
is_prime(n):- 使用简单的循环和条件判断来确定一个数是否为素数。
-
元素计数
Counter(a):- 使用
collections.Counter来统计数组中每个元素的出现次数。
- 使用
-
双重素数判断:
- 首先筛选出既是素数的元素。
- 然后进一步筛选这些素数元素,判断它们的出现次数是否也是素数。
测试样例
-
样例1:
[1, 2, 3, 2, 5, 7, 7, 7, 5]- 输出:
3 - 解释:元素
2出现 2 次(素数),元素5出现 2 次(素数),元素7出现 3 次(素数)。
- 输出:
-
样例2:
[1, 4, 6, 8, 10, 12]- 输出:
0 - 解释:没有素数元素。
- 输出:
-
样例3:
[3, 3, 3, 5, 5, 5, 5]- 输出:
1 - 解释:元素
3出现 3 次(素数),元素5出现 4 次(非素数)。
- 输出:
总结
- 通过
is_prime函数判断素数。 - 使用
Counter统计元素出现次数。 - 双重筛选素数元素及其出现次数,最终统计符合条件的元素个数。