【发布时间】:2020-02-06 19:38:46
【问题描述】:
我想创建一个从 int 数组返回非素数数量的方法。
我用来标记数组中素数的方法是这样的(这部分不需要任何改动):
public static int markNonePrimeNumbers(int[] array) {
createInitialArray(100);
for (int j = 2; j < array.length; j++) {
for (int i = j * 2; i < array.length; i += j) {
array[i] = 0;
}
}
我想修改它,使它可以返回 array[i] = 0 的数量并计算它。
我通过添加 HashMap 做到了这一点:
public static int[] markNonePrimeNumbers(int[] array) {
createInitialArray(100);
for (int j = 2; j < array.length; j++) {
for (int i = j * 2; i < array.length; i += j) {
array[i] = 0;
}
}
Map<Integer, Integer> map = new HashMap<>();
for (int key : array) {
if (map.containsKey(key)) {
int occurrence = map.get(key);
occurrence++;
map.put(key, occurrence);
} else {
map.put(key, 0);
}
}
for (Integer key : map.keySet()) {
int occurrence = map.get(key);
System.out.println(occurrence);
}
总的来说,我很接近,但我不知道如何从 Map 中删除所有大于 1 的索引。它已经计算了第一个索引上 0 的数量。
【问题讨论】:
标签: java arrays hashmap sieve-of-eratosthenes