如何使此函数输出最大数组值?

我是C ++的新手,正在尝试使这段代码正常工作。这是用于 质数。我创建一个数组,其大小由用户输入定义。那我要列印 仅此数组的最大素数。我该怎么办?

alias de='winpty docker exec'
haoyun1126 回答:如何使此函数输出最大数组值?

您可以使用std::max_element中的<algorithm>在数组中找到最大的数字:

return *std::max_element(a,a+n);

但这甚至不是必需的。由于最大的素数将是您找到的最后一个素数,因此请保持跟踪:

int biggestPrime = 2;

然后,当您找到素数时:

biggestPrime = j;

您也可以将long long的数组替换为bool的数组,因为索引已经可以跟踪数字了:

unsigned long long nPrime(unsigned n) {
    bool *a = new bool[n + 1]();
    long long maxNum = a[n];
    int biggestPrime = 2;

    for (int j = 2; j < n + 1; j++) {
        if (!a[j]) {
            for (int k = j * j; k < n + 1; k += j) {
                a[k] = true;
            }
            biggestPrime = j;
        }
    }
    delete[] a;
    return biggestPrime;
}

最后但并非最不重要的一点是,完成后不要忘记delete动态分配的内存:

delete[] a;
,

似乎您在数组中将非素数标记为值0。我们知道素数是正数,为简化起见,令maxNum为-1。然后我在和的函数中添加了一个,它将计算数组中的最大素数。这是一种方法:

unsigned long long nPrime(unsigned n) {
    long long *a = new long long[n + 1];
    long long maxNum = -1;

    for (long long i = 0; i < n + 1; i++) {
        a[i] = i;
    }

    for (long long i = 2; i < n + 1; i++) {
        for (long long k = i * i; k < n + 1; k += i) {
            a[k] = 0;
        }
    }

    for (long long i = 1; i < n; i++) {
        if (a[i] != 0 && maxNum < a[i]) maxNum = a[i];
    }

    return maxNum;
}

也可以使用更快的版本,而不是最后一个。在此版本中,您甚至不需要maxNum值:让我们从结尾开始,第一个非零值将是答案:

for (long long i = n; i >= 2; i--) {
    if (a[i] != 0) return a[i];
}
本文链接:https://www.f2er.com/3052042.html

大家都在问