是否有合适的算法允许程序搜索未排序的矩阵以搜索其中的最大素数。矩阵的大小为m * n,可以填充其他素数和非素数。搜索必须找到最大的素数。
我研究了分而治之算法,二叉树和逐步搜索,但所有这些都处理了排序矩阵。
答案 0 :(得分:1)
首先,如果使用m * n矩阵或带有m * n个元素的向量,则无关紧要。一般来说,您必须至少访问一次每个矩阵元素,因为它没有排序。几乎没有提示让流程更快。
如果它是大矩阵,你应该逐行访问元素(而不是逐列),因为矩阵以这种方式存储在内存中,以便一旦访问,同一行中的元素可能会在缓存中其中之一。
测试数字的素数是您任务中成本最高的部分,因此如果矩阵中的数字不是太大,您可以使用Eratosthenes的筛选算法提前查找素数。 https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
如果您不使用Eratosthenes的筛子,如果您在算法之前对数字进行排序以便可以测试从最大到最小的数字,这将是有益的。在这种情况下,一旦找到第一个素数,您的算法就可以停止。如果你不对它进行排序,你将不得不测试所有数字,这可能是最慢的方法。
答案 1 :(得分:0)
你可以这样做:
for (int i = 0; i < m; m++)
{
for (int j = 0; j < n; j++)
{
if ((array[i][j] == *a prime number*)
&& (array[i][j] > biggestPrime))
{
biggestPrime = array[i][j];
}
}
}