使用C++编写,找到子数组中的质数数量

使用c++编写,找到子数组中的质数数量

在本文中,我们将描述查找子数组中素数数量的方法。我们有一个正数数组 arr[] 和 q 个查询,其中有两个整数表示我们的范围 {l, R},我们需要找到给定范围内的素数数量。下面是给定问题的示例 –

Input : arr[] = {1, 2, 3, 4, 5, 6}, q = 1, L = 0, R = 3Output : 2In the given range the primes are {2, 3}.Input : arr[] = {2, 3, 5, 8 ,12, 11}, q = 1, L = 0, R = 5Output : 4In the given range the primes are {2, 3, 5, 11}.

寻找解决方案的方法

在这种情况下,我想到了两种方法 –

暴力破解

在这种方法中,我们可以采用范围并找出该范围内存在的素数数量。

示例

#include using namespace std;bool isPrime(int N){    if (N <= 1)       return false;    if (N <= 3)       return true;    if(N % 2 == 0 || N % 3 == 0)       return false;    for (int i = 5; i * i <= N; i = i + 2){ // as even number can't be prime so we increment i by 2.       if (N % i == 0)           return false; // if N is divisible by any number then it is not prime.    }    return true;}int main(){    int N = 6; // size of array.    int arr[N] = {1, 2, 3, 4, 5, 6};    int Q = 1;    while(Q--){        int L = 0, R = 3;        int cnt = 0;        for(int i = L; i <= R; i++){           if(isPrime(arr[i]))               cnt++; // counter variable.        }        cout << cnt << "n";    }    return 0;}

输出

2

但是,这种方法并不是很好,因为这种方法的整体复杂度是O(Q*N*√N),这不是很好。

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

高效方法

在这种方法中,我们将使用埃拉托斯特尼筛法创建一个布尔数组,告诉我们该元素是否是素数,然后遍历给定的范围并找到该数组中素数的总数。布尔数组。

示例

#include using namespace std;vector sieveOfEratosthenes(int *arr, int n, int MAX){    vector p(n);    bool Prime[MAX + 1];    for(int i = 2; i < MAX; i++)       Prime[i] = true;    Prime[1] = false;    for (int p = 2; p * p <= MAX; p++) {       // If prime[p] is not changed, then       // it is a prime       if (Prime[p] == true) {           // Update all multiples of p           for (int i = p * 2; i <= MAX; i += p)               Prime[i] = false;       }    }    for(int i = 0; i < n; i++){        if(Prime[arr[i]])           p[i] = true;        else           p[i] = false;    }    return p;}int main(){    int n = 6;    int arr[n] = {1, 2, 3, 4, 5, 6};    int MAX = -1;    for(int i = 0; i < n; i++){        MAX = max(MAX, arr[i]);    }    vector isprime = sieveOfEratosthenes(arr, n, MAX); // boolean array.    int q = 1;    while(q--){        int L = 0, R = 3;        int cnt = 0; // count        for(int i = L; i <= R; i++){            if(isprime[i])               cnt++;       }       cout << cnt << "n";   }   return 0;}

输出

2

上述代码的解释

这种方法比我们之前应用的蛮力方法要快得多,因为现在的时间复杂度是O(Q*N),即比以前的复杂性要好得多。

在这种方法中,我们预先计算元素并将它们标记为素数或非素数;因此,这降低了我们的复杂性。除此之外,我们还使用埃拉托斯特尼筛法,这将帮助我们更快地找到素数。在此方法中,我们通过使用素数因子标记数字,以 O(N*log(log(N))) 复杂度将所有数字标记为素数或非素数。

结论

在本文中,我们解决了使用埃拉托斯特尼筛法在 O(Q*N) 中查找子数组中素数数量的问题。我们还学习了解决这个问题的C++程序以及解决这个问题的完整方法(正常且高效)。我们可以用其他语言编写相同的程序,例如C、java、python等语言。

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

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 21:10:31
下一篇 2025年12月8日 15:20:19

相关推荐

  • 在C语言中编写一个打印反向Floyd三角形的程序

    程序描述 弗洛伊德三角形是自然数的直角三角形数组,用于计算机科学教育。它以罗伯特·弗洛伊德的名字命名。它是通过用连续的数字填充三角形的行来定义的,从左上角的 1 开始 1 15 14 13 12 112 3 10 9 8 74 5 6 6 5 47 8 9 10 3 211 12 13 14 15 …

    2025年12月17日
    000
  • 在C++中的可重构数

    给定一个整数类型的值,假设为number。任务是检查给定的数字是否可重构。如果是,打印该数字是可重构数字,否则打印不可能。 什么是可重构数字? 当一个数字可以被其可用因子的总数整除时,它就是可重构的。例如,数字9是可重构的,因为它有3个因子(1、3、9),而9可以被3整除,因此它是一个可重构数字。 …

    2025年12月17日
    000
  • 计算菱形的面积和周长的程序,已知对角线是什么?在C++中,什么是菱形?

    什么是菱形? 在几何学中,菱形是四个边长相同的四边形。菱形与形状菱形相似。如果菱形的对角线成直角,那么它就变成正方形。 菱形的性质是 – 边相等对边平行,对角相等,是平行四边形对角线平分直角 下图是菱形 立即学习“C++免费学习笔记(深入)”; 问题 给定对角线,假设 d1 和 d2 的…

    2025年12月17日
    000
  • 使用C++反转一个双向链表

    在本文中,我们有一个双向链表,我们将解释在 C++ 中反转双向链表的不同方法。例如 – Input : {1, 2, 3, 4}Output : {4, 3, 2, 1} 通常会想到一种方法,但我们将使用两种方法 – 正常方法和非正统方法。 正常方法 在这种方法中,我们将经历…

    2025年12月17日
    000
  • C令牌是什么?

    这个C程序是一系列指令,每个指令都是一系列个体单元的集合。 C程序中的每个小个体单元通常被称为令牌,C程序中的每个指令都是令牌的集合。 令牌用于构建C程序,它们也被称为C程序的基本构建块。 在C程序中,令牌包含以下内容: 关键字标识符运算符特殊符号常量字符串数据值 在C程序中,所有这些关键字、标识符…

    2025年12月17日
    000
  • 在C语言中,while(1)和while(0)之间的区别是什么?

    我们知道在C语言中,’while’关键字用于定义一个循环,该循环根据传递给循环的条件来工作。现在,由于条件可以有两个值,即真或假,所以如果条件为真,则while块内的代码将被重复执行,如果条件为假,则代码将不会被执行。 现在,通过将参数传递给while循环,我们可以区分whi…

    2025年12月17日
    000
  • 在C语言中,是否可以在main()函数中传递参数?

    是的,我们可以在 main() 函数中给出参数。 C 中的命令行参数在系统命令行中的程序名称之后指定,这些参数值将传递给程序执行期间的程序。 argc 和 argv 是可以传递给 main 函数的两个参数。 但是当您从终端运行程序时,main() 函数实际上由操作系统(或 shell 程序)调用。 …

    2025年12月17日
    000
  • 如何在C中修改一个const变量?

    在C或C++中,我们可以使用常量变量。常量变量的值在初始化后就不能更改。在本节中,我们将了解如何更改某些常量变量的值。 如果我们想要更改常量变量的值,则会产生编译时错误。请检查以下代码以获得更好的想法。 示例 #include main() { const int x = 10; //define …

    2025年12月17日
    000
  • 使用C++找到Pell数

    在给定的问题中,我们得到一个整数 n,我们需要找到 Pn,即该位置的咒语编号。现在,正如我们所知,拼写数是由以下公式给出的序列的一部分 -Pn = 2*Pn-1 + Pn-2 前两个起始数字 – P0 = 0 和 P1 = 1 查找方法解决方案 现在我们将通过两种方法来解决这个问题:递归…

    2025年12月17日
    000
  • 在C语言中,预定义标识符__func__

    标识符是在编程中给实体赋予的名称,以在程序中进行标识。 通常,标识符是由程序员创建的,以实现高效工作,但也有一些预定义的标识符内置在编程中。例如,cout、cin等。 在这里,我们将看到C编程语言中的一个预定义标识符__func__。 __func__的正式定义为 − 立即学习“C语言免费学习笔记(…

    2025年12月17日
    000
  • c语言如何输出double类型

    c语言输出double类型的方法:1、使用printf函数输出,可以用于输出不同类型的值,包括double类型;2、使用fprintf函数输出到文件,使用fprintf函数可以将double类型的值输出到指定的文件中;3、使用sprintf函数输出到字符串,有时候,需要将double类型的值输出到一…

    2025年12月17日
    000
  • 用C语言编写模拟非确定有限自动机(NFA)的程序

    在这个问题中,我们将创建一个 C 程序来模拟非确定性有限自动机 (NFA)。 NFA(非确定性有限自动机)有限状态机可以移动到输入符号的任意状态组合,即没有机器将移动到的确切状态。 NDFA 的正式定义 – NFA / NDFA(非确定性有限自动机)可以用 5 元组(Q、Σ、δ、q0、F…

    2025年12月17日
    000
  • 在C语言中的命令行参数示例

    在执行 C 程序时,可以将一些值从命令行传递给它们。这些值称为命令行参数,很多时候它们对您的程序很重要,尤其是当您想从外部控制程序而不是在代码内对这些值进行硬编码时。 命令行参数使用 main() 函数参数处理,其中 argc 指传递的参数数量,argv[] 是指向每个参数的指针数组传递给程序。以下…

    2025年12月17日
    000
  • 使用多线程在C++中实现归并排序

    我们得到一个未排序的整数数组。任务是使用通过多线程实现的合并排序技术对数组进行排序 合并排序 合并排序是一种基于分而治之技术的排序技术,我们将将数组分成相等的两半,然后以排序的方式将它们组合起来。 实现归并排序的算法是 检查是否有一个元素 否则,将数据递归地分成两半,直到无法再分为止。 立即学习“C…

    2025年12月17日
    000
  • 在C语言中,寄存器存储类是什么?

    在C编程语言中有四个存储类,分别是: autoexternstaticregister 寄存器变量 关键字是register。 寄存器变量的值存储在CPU的寄存器中,而不是存储在内存中,普通变量存储在内存中。 寄存器是CPU中的临时存储单元。 立即学习“C语言免费学习笔记(深入)”; 它们允许寄存器…

    2025年12月17日
    000
  • 在C语言中,负数的绝对值为正数

    在这里,我们将看到如果我们使用负数来获取模数会得到什么结果。让我们看一下以下程序及其输出,以了解这个概念。 示例 #includeint main() { int a = 7, b = -10, c = 2; printf(“Result: %d”, a % b / c);} 输出 Result: …

    2025年12月17日
    000
  • C语言中的身份矩阵程序

    给定一个方阵 M[r][c],其中“r”是一定数量的行,“c”是列,使得 r = c,我们必须检查“M”是否是单位矩阵。 恒等矩阵 恒等矩阵也称为大小为nxn方阵的单位矩阵,其中对角元素的整数值为1,非对角元素的整数值为0 p> 就像下面给定的示例 – $$I1=begin{bma…

    2025年12月17日
    000
  • C++程序打印空心的右三角星形图案

    以金字塔、正方形和菱形等不同格式显示星形图案非常有用常见于基础编程和逻辑构建。我们见过几颗星星学习编程中的循环语句时的数字模式问题。在本文中,我们将看到如何在 C++ 中打印空心直角三角形星形图案。 在此程序中,我们采用行号 n,这将为 n 个数创建一个星形图案线。让我们看一下相同的示例。 右空心星…

    2025年12月17日
    000
  • C/C++标记?

    C++ 令牌是程序的最小独立单元。 C++ 是 C 的超集,因此大多数 C 结构在 C++ 中都是合法的,其含义和用法不变。因此,标记、表达式和数据类型与 C 的标记、表达式和数据类型类似。 以下是 C++ 标记:(大多数 C++ 标记基本上与 C 标记类似) 关键字标识符常量变量运算符 关键字 关…

    2025年12月17日
    000
  • 使用C++编写的代码:找到使用字母表前K个字母组成的字典序最小的字符串,且相邻字符不能相同

    在编程世界中,解决字符串操作问题是一个常见且有趣的挑战。面临的一个关键问题是如何仅利用字母表中的 K 个字母来获得按字典顺序排列的最小字符串,同时遵循诸如不匹配相邻字符之类的附加约束。在本文中,我们的目的是深入研究这个问题并使用 C++ 编程语言提出有效的解决方案。通过详细介绍语法中使用的不同方法并…

    2025年12月17日
    000

发表回复

登录后才能评论
关注微信