使用C++编写,找到数组中的素数对数量

使用c++编写,找到数组中的素数对数量

在本文中,我们将解释有关使用 C++ 查找数组素数对数量的所有内容。我们有一个整数数组 arr[],我们需要找到其中存在的所有可能的素数对。这是问题的示例 –

Input : arr[ ] = { 1, 2, 3, 5, 7, 9 }Output : 6From the given array, prime pairs are(2, 3), (2, 5), (2, 7), (3, 5), (3, 7), (5, 7)Input : arr[] = {1, 4, 5, 9, 11}Output : 1

寻找解决方案的方法

暴力方法

现在我们将讨论最基本的方法,即暴力方法,并尝试找到另一种方法:这种方法效率不高。

示例

#include using namespace std;void seiveOfEratosthenes(int *arr, bool *prime, int n, int MAX){    bool p[MAX+1];    memset(p, true, sizeof(p));    p[1] = false;    p[0] = false;     for(int i = 2; i * i <= MAX; i++){        if(p[i] == true){            for(int j = i*2; j <= MAX; j += i){               p[j] = false;            }        }    }    for(int i = 0; i < n; i++){        if(p[arr[i]] == true)           prime[i] = true;    }}int main(){    int arr[] = {1, 2, 3, 5, 7, 8, 9};    int n = sizeof(arr) / sizeof(arr[0]); // size of our array.    int answer = 0; // counter variable to count the number of prime pairs.    int MAX = INT_MIN; // Max element    for(int i = 0; i < n; i++){       MAX = max(MAX, arr[i]);    }    bool prime[n]; // boolean array that tells if the element is prime or not.    memset(prime, false, sizeof(prime)); // initializing all the elements with value of false.    seiveOfEratosthenes(arr, prime, n, MAX);    for(int i = 0; i < n-1; i++){        for(int j = i+1; j < n; j++){            if(prime[i] == true && prime[j] == true)               answer++;         }    }    cout << answer << "n";    return 0;}

输出

6

在这种方法中,我们创建了一个布尔数组,用于告诉我们每个元素是否为素数,然后我们遍历所有可能的配对,并检查配对中的两个数字是否为素数。如果是素数,则将答案增加一并继续。

但是这种方法并不是很高效,因为它的时间复杂度为O(N*N),其中N是数组的大小,所以现在我们要使这种方法更快。

立即学习“C++免费学习笔记(深入)”;

高效方法

在这种方法中,大部分代码都是相同的,但关键的变化是,我们不再遍历所有可能的配对,而是使用一个公式来计算它们。

示例

#include using namespace std;void seiveOfEratosthenes(int *arr, bool *prime, int n, int MAX){   bool p[MAX+1];   memset(p, true, sizeof(p));   p[1] = false;   p[0] = false;   for(int i = 2; i * i <= MAX; i++){       if(p[i] == true){           for(int j = i*2; j <= MAX; j += i){               p[j] = false;           }       }    }    for(int i = 0; i < n; i++){       if(p[arr[i]] == true)           prime[i] = true;   }}int main(){   int arr[] = {1, 2, 3, 5, 7, 8, 9};   int n = sizeof(arr) / sizeof(arr[0]); // size of our array.   int answer = 0; // counter variable to count the number of prime pairs.   int MAX = INT_MIN; // Max element   for(int i = 0; i < n; i++){       MAX = max(MAX, arr[i]);   }   bool prime[n]; // boolean array that tells if the element is prime or not.   memset(prime, false, sizeof(prime)); // initializing all the elements with value of false.   seiveOfEratosthenes(arr, prime, n, MAX);   for(int i = 0; i < n; i++){       if(prime[i] == true)           answer++;   }   answer = (answer * (answer - 1)) / 2;   cout << answer << "n";   return 0;}

输出

6

正如您所看到的,大部分代码与之前的方法相同,但是大大降低了复杂性的关键变化是我们使用的公式,即 n(n-1)/2,它将计算我们的素数对的数量。

上述代码的解释

在这段代码中,我们使用埃拉托斯特尼筛法来标记所有素数,直到我们在大批。在另一个布尔数组中,我们按索引标记元素是否为素数。

最后,我们遍历整个数组,找到存在的素数总数,并找到所有可能的素数使用公式 n*(n-1)/2 进行配对。通过这个公式,我们的复杂度降低到 O(N),其中 N 是数组的大小。

结论

在本文中,我们解决一个问题,以 O(n) 的时间复杂度查找数组中存在的素数对的数量。我们还学习了解决这个问题的C++程序以及解决这个问题的完整方法(正常且高效)。我们可以用其他语言编写相同的程序,例如C、java、python等语言。

以上就是使用C++编写,找到数组中的素数对数量的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1445241.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 22:19:44
下一篇 2025年12月11日 13:46:26

相关推荐

  • 在给定的数组中找到最后一个回文字符串

    在这个问题中,我们需要找到数组中的最后一个回文字符串。如果任何字符串在读取时相同,无论是从头开始读取还是从末尾开始读取,都可以说该字符串是回文。我们可以比较起始字符和结束字符来检查特定字符串是否是回文。查找回文字符串的另一种方法是将字符串反转并与原始字符串进行比较。 问题陈述 – 我们给…

    2025年12月17日
    000
  • 按照给定的查询重新排列和更新数组元素

    在这个问题中,我们将对数组元素执行给定的查询。查询包含数组元素的循环左旋转、右旋转和更新。 解决问题的逻辑部分是数组旋转。向左旋转数组的简单方法是将每个元素替换为下一个元素,将最后一个元素替换为第一个元素。 我们可以使用deque数据结构来高效地旋转数组。 问题陈述 – 我们给出了一个包…

    2025年12月17日
    000
  • C++程序:在数组中找到最大的可整除子集

    本教程将讨论一个问题,其中给定一个不同的正整数数组。我们需要找到最大的子集,使得每对较大的元素除以较小的元素,例如 – Input: nums[ ] = { 1, 4, 2, 6, 7}Output: 1 2 4Explanation:All Divisible subsets are:…

    2025年12月17日
    000
  • C++程序:对数组元素进行升序排序

    为了有效地解决一些问题,将数据项排列在正确的位置非常重要顺序。最流行的排列问题之一是元素排序问题。这本文将演示如何在 C++ 中按升序排列数组成员(根据值不断上升)。 要按特定顺序排列数字或非数字元素,有多种方法排序算法可用于该领域。只需两种简单的排序技术即可将在本文中介绍。选择排序和冒泡排序。让我…

    2025年12月17日
    000
  • 使用C++编写,将以下内容翻译为中文:在删除数组的一部分后,计算K个数组的最小公共和

    在使用C++数组时,我们有时需要计算多个数组中的最小公共和,同时删除它们后缀的一部分。在本文中,我们将使用C++探讨这个问题的有效解决方案。 语法 让我们首先分析我们选择的方法的语法,然后再继续在我们的代码中实现它 – int findMinimumCommonSum(vector&lt…

    2025年12月17日
    000
  • 找到C++中修改后数组的最小值的最大可能值

    在这个问题中,我们给定一个大小为 n 的数组 arr[] 和一个数字 S。我们的任务是找到修改后的数组的最小值的最大可能值。 p> 这里是修改数组的规则, 修改前后数组元素之和应为S。 修改后的数组中不允许有负值。 如果修改后的数组,需要数组的最小值最大化。 立即学习“C++免费学习笔记(深入…

    2025年12月17日
    000
  • 如何在C语言中将整个数组作为参数传递给函数?

    数组 数组是一组具有相同名称的相关项。以下是将数组作为参数传递给函数的两种方式: 将整个数组作为参数传递给函数将单个元素作为参数传递给函数 将整个数组作为参数传递给函数 要将整个数组作为参数传递,只需在函数调用中发送数组名称。 要接收一个数组,必须在函数头中声明。 示例1 #includemain …

    2025年12月17日
    000
  • 根据给定条件,从数组中构建一个长度为K的二进制字符串

    在本教程中,我们需要构造一个长度为 K 的二进制字符串,如果使用数组元素可以实现等于 I 的子集和,则它的第 i 个索引处应包含“1”。我们将学习两种解决问题的方法。在第一种方法中,我们将使用动态规划方法来检查子集和等于索引“I”是否可能。在第二种方法中,我们将使用位集通过数组元素查找所有可能的和。…

    2025年12月17日
    000
  • 使用C++编写,找出由三条线上的一组点组成的三角形的数量

    现在我们得到了 3 行中存在的几个点;例如,我们需要找出这些点可以形成多少个三角形 Input: m = 3, n = 4, k = 5Output: 205Input: m = 2, n = 2, k = 1Output: 10 我们将应用一些组合数学来解决这个问题,并制定一些公式来解决这个问题。…

    2025年12月17日
    000
  • C++程序在数组开头添加元素

    通过使用数组和数据结构,可以在多个内存位置上存储同质(相同)数据。使用数组的关键好处是我们可以使用索引参数从任何位置检索它们。这种数据结构变得线性,因为数据必须逐步插入和提取。我们只需要将该元素的索引或位置号放在方括号内,就可以从数组中检索它。在本文中,我们将使用数组A和另一个元素e。我们将在C++…

    2025年12月17日
    000
  • 使用C++找到数组中唯一配对的数量

    我们需要适当的知识才能在 C++ 的数组语法中创建几个唯一的对。在查找唯一对的数量时,我们计算给定数组中的所有唯一对,即可以形成所有可能的对,其中每个对应该是唯一的。例如 – Input : array[ ] = { 5, 5, 9 }Output : 4Explanation : Th…

    2025年12月17日
    000
  • 一个数组可以重复分割成具有相等和的子数组的次数

    在C++中,我们有一个vector头文件,可以在运行时更改数组的大小。在本文中,我们将学习数组可以重复分割成具有相等和的子数组的次数的概念。 Let’s take an example to show an array partition with an equal sum. 给定的数组是{1,2,…

    2025年12月17日
    000
  • C程序用于在数组中找到第二大和第二小的数字

    输入数组元素,然后使用交换技术按降序排列数字。随后,在索引位置的帮助下,尝试打印数组中第二大和第二小的元素。 数组用于保存同一个名称下的一组公共元素。 数组用于保存同一个名称下的一组公共元素。 p> C 语言中的数组操作如下 – 插入删除搜索 li> 算法 下面给出的是一种查…

    2025年12月17日
    000
  • 用C++编写一个程序,找出数组中所有元素对之间第k小的差值

    假设我们有一个包含多个整数的列表。我们必须找出数组中每对值之间的差异,并找出第 k 个最小的差异数。索引从 0 开始,值 k 作为输入提供给我们。 因此,如果输入类似于numbers = {2, 6, 4, 8}, k = 2,那么输出将为 2。 两对之间的差异为 – (2, 6) = …

    2025年12月17日
    000
  • C程序在数组中找到最小和最大的质数

    问题陈述 给定一个包含 n 个正整数的数组。我们必须找到素数具有最小值和最大值的数字。 如果给定的数组是 – arr [] = {10, 4, 1, 12, 13, 7, 6, 2, 27, 33}then minimum prime number is 2 and maximum pr…

    2025年12月17日
    000
  • 使用给定的操作将数组缩减为一个整数,使用C++实现

    给定一个整数变量Number作为输入。让我们考虑一个包含范围在1到Number之间的元素的数组,元素的顺序可以是任意的。如果我们在数组上执行Number-1次操作,操作如下: 我们从数组中选择两个元素A和B 从数组中移除A和B 将A和B的平方和添加到数组中 立即学习“C++免费学习笔记(深入)”; …

    2025年12月17日
    000
  • 使用C++将数组重新排列为最大最小形式

    我们得到一个排序数组。我们需要以最大、最小形式排列这个数组,即第一个元素是最大元素,第二个元素是最小元素,第三个元素是第二个最大元素,第四个元素是第二个最小元素,依此类推,例如 – Input : arr[ ] = { 10, 20, 30, 40, 50, 60 }Output : {…

    2025年12月17日
    000
  • 在C/C++中,4维数组

    一个4维数组是由3维数组组成的数组。 算法 Begin. Declare the variables. Declare the array elements. Take the no of elements as input. Take the elements as input. Print th…

    2025年12月17日
    000
  • 在C程序中,从给定的数组中打印下三角矩阵模式

    给定一个 n x n 的矩阵,任务是以下三角形式打印出该矩阵。 下三角矩阵是一个矩阵,其主对角线以下的元素包括主对角线元素,其余元素均为零。 我们通过以下图示来理解: 上述绿色元素是主对角线以下的元素,红色元素是主对角线以上的元素,它们被设为零。 示例 Input: matrix[3][3] = {…

    2025年12月17日
    000
  • C++另一个数组中较小值的排列

    本教程中提供了两个数组 A 和 B。例如,我们需要输出 A 的任意排列,使得 A[ I ] > B[ I ] 的索引最大化,例如 Input: A = [12, 22, 41, 13],B = [1, 20, 10, 12]Output: 12, 22, 41, 13Input: A = [2…

    2025年12月17日
    000

发表回复

登录后才能评论
关注微信