有害数

有害数

如果数字是正整数并且其二进制展开中的设置位数是素数,则该数字被认为是有害的。第一个有害数字是 3,因为 3 = (11)2。可以看出3的二进制表示的设定位数为2,是一个素数。

前10个有害数字是3、5、6、7、9、10、11、12、13、14。有趣的是,2的幂永远不可能是有害数字,因为它们总是只有1个设置位。1不是质数。另一方面,所有可以表示为2n + 1的数字,其中n是任意自然数,将始终是有害数字,因为它们将有2个设置位,而我们知道2是一个质数。

牢记这些有害数字的特性,下面的文章讨论了一种检查一个数字是否为有害数字的方法。

问题陈述

此问题旨在检查给定数字 n 是否是一个有害数字,即它是一个正数,在其二进制展开中具有质数个设置位。

示例

Input: 37
Output: Pernicious

Explanation

的翻译为:

解释

37 = 100101 的二进制表示。

设置位数 = 3

由于 3 是素数,因此 37 是一个有害的数字。

Input: 22
Output: Pernicious

Explanation

的翻译为:

解释

22 = 10110 的二进制表示。

设置位数 = 3。

由于3是一个质数,22是一个恶毒数。

Input: 71
Output: Not Pernicious

Explanation

的翻译为:

解释

71的二进制表示为1000111。

设置位数 = 4。

由于 4 不是质数,因此 71 也不是有害数字。

Input: 64
Output: Not Pernicious

Explanation

的翻译为:

解释

64的二进制表示为1000000。

设置位数 = 1。

由于64 = 26,即它是2的幂,它有1个设置位。由于1不是质数,64不是一个恶性数。

解决方案

我们必须知道设置位数是否为质数,以便确定一个数是否是恶性的。手头的主要任务是计算该数的二进制展开中的设置位数。以下方法可用于计算设置位数,然后确定结果是否为质数。

该方法包括以下步骤 –

使用循环和右移运算符迭代数字的所有位。

如果位值为 1,则设置位的计数加 1。

检查计数的最终值是否为质数。

显示答案。

算法

函数 is_prime()

如果 (n

返回错误

for (i从2到√a)

如果(a%i==0)

返回错误

返回 true

函数count_set_bits()

初始化计数器 = 0

当 (n > 0)

如果 ((n & 1) > 0)

计数器 = 计数器 + 1

n = n >> 1

退货柜台

函数 is_pernious()

初始化计数器

计数器 = count_set_bits(n)

if (is_prime(counter) == true)

返回真

其他

返回错误

函数main()

初始化n

if (is_pernious())

cout

其他

cout

打印输出

示例:C++ 程序

程序使用函数

is_pernicious()

确定数字是否有害。它通过在函数

count_set_bits()

中每次迭代结束时右移 n 的值来分析循环每次迭代中的最低有效位。然后,它调用函数

is_prime()

来收集设置的位数是否为素数。

#include using namespace std;// this function counts the number of set bits by analyzing the rightmost bit using a while loop till n > 0.// it performs logical & operation between 1 and n to determine if the rightmost bit is set or not.// if it is set, count is incremented by 1// right shift the value of n to make the bit left of the rightmost bit, the new rightmost bit.int count_set_bits(int n){   int count = 0;   while (n > 0){         // if the rightmost bit is 1: increment count      if ((n & 1) > 0){         count++;      }            // right shift the value of n to examine the next least significant bit      n = n >> 1;   }   return count;}// this function determines if count of set bits in the given number is primebool is_prime(int count){   if (count < 2)   return false;   for (int i = 2; i * i  perniciousbool is_pernicious(int n){   int count;   count = count_set_bits(n);      // if count is prime return true   if (is_prime(count)){      return true;   }   return false;}// main functionint main(){   int n = 11;   if (is_pernicious(n)){      cout << n <<" is Pernicious Number";   }   else{      cout << n << " is Non-Pernicious Number";   }   return 0;}

输出

11 is Pernicious Number

时空分析

时间复杂度:O(log(n) + sqrt(count))。在函数 count_set_bits() 中,当我们逐位分析数字时,循环会执行 log(n) 次。函数 is_prime() 需要 O(sqrt(count)) 时间来检查 count 是否为素数。这两个函数在执行过程中都会被调用一次。

空间复杂度:O(1),因为在实现中没有使用任何辅助空间。无论输入数字的大小,该算法始终使用恒定的空间。

结论

有害数字是一个有趣的数学概念,可以使用上面讨论的方法轻松有效地识别它们。本文还介绍了要使用的算法、C++ 程序解决方案以及时间和空间复杂度分析。

以上就是有害数的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 20:03:55
下一篇 2025年12月17日 20:04:03

相关推荐

  • 如何实现C#中的归并排序算法

    如何实现C#中的归并排序算法 归并排序是一种基于分治思想的经典排序算法,其通过将一个大问题划分为多个小问题、然后逐步解决小问题并合并结果来完成排序。下面将介绍如何在C#中实现归并排序算法,并提供具体的代码示例。 归并排序的基本思想是将待排序的序列拆分为多个子序列,分别进行排序,然后再将排序好的子序列…

    2025年12月17日
    000
  • 如何使用C#编写深度学习算法

    如何使用C#编写深度学习算法 引言:随着人工智能的迅猛发展,深度学习技术在许多领域取得了突破性的成果。为了实现深度学习算法的编写和应用,目前最常用的语言是Python。然而,对于喜欢使用C#语言的开发者来说,使用C#编写深度学习算法也是可行的。本文将介绍如何使用C#编写深度学习算法,并提供具体的代码…

    2025年12月17日
    000
  • 如何使用C#编写贝叶斯分类算法

    如何使用C#编写贝叶斯分类算法 贝叶斯分类算法是一种常用的机器学习算法,它基于贝叶斯定理,通过统计学的方法进行分类预测。在实际应用中,我们可以使用C#编写贝叶斯分类算法来解决各种分类问题。本文将介绍如何使用C#编写贝叶斯分类算法,并且提供具体代码示例。 步骤一:准备训练数据 首先,我们需要准备一份有…

    2025年12月17日
    000
  • 如何实现C#中的人脸识别算法

    如何实现C#中的人脸识别算法 人脸识别算法是计算机视觉领域中的一个重要研究方向,它可以用于识别和验证人脸,广泛应用于安全监控、人脸支付、人脸解锁等领域。在本文中,我们将介绍如何使用C#来实现人脸识别算法,并提供具体的代码示例。 实现人脸识别算法的第一步是获取图像数据。在C#中,我们可以使用Emgu …

    2025年12月17日
    000
  • 如何使用C#编写背包问题算法

    如何使用C#编写背包问题算法 背包问题(Knapsack Problem)是一个经典的组合优化问题,它描述了一个给定容量的背包以及一系列物品,每个物品都有自己的价值和重量。目标是找到一种最佳策略,使得在不超过背包容量的情况下,装入背包的物品总价值最大。 在C#中,可以通过动态规划方法来解决背包问题。…

    2025年12月17日
    000
  • c语言 三种求回文数的算法

    今天小编和大家分享的文章是c语言的三种描述回文数的算法,具有一定参考价值,对c语言回文数有兴趣的可以来看看,希望对你有所帮助。 题目描述 注意:(这些回文数都没有前导0)1位的回文数有0,1,2,3,4,5,6,7,8,9   共10个;2位的回文数有11,22,33,44,55,66,77,88,…

    2025年12月17日
    000
  • 伪代码是什么?如何写一个伪代码?

    伪代码是经常用于编程和基于算法的字段的术语;它是一种允许程序员表示算法实现的方法。简单地说,我们可以说它是算法的熟化表示。本篇文章就来带大家简单认识一下伪代码,介绍简单的c语言伪代码怎么写,希望对大家有所帮助。 伪代码是什么? 通常,算法是在伪代码的帮助下表示的,因为无论学习什么编程语言或掌握多深的…

    2025年12月17日
    000
  • Golang实现短链接服务 算法与存储设计

    短链接服务核心是唯一标识生成与高效存储。采用“分布式ID+Base62编码”算法可保证唯一性与较短长度,结合“MySQL/PostgreSQL+Redis”存储架构,利用Redis缓存高频读取,数据库持久化保证一致性,Golang通过goroutine处理高并发,配合连接池、异步队列与监控实现高性能…

    2025年12月15日
    000
  • 如何解决背包问题?

    动态规划是解决0/1背包问题的核心方法,通过构建dpi表示前i件物品在容量j下的最大价值,利用状态转移方程dpi = max(dpi-1, v[i] + dpi-1])逐层求解,最终得到dpn为最优解;该方法时间复杂度O(nW),空间复杂度可优化至O(W);相比贪心算法仅适用于分数背包、回溯法效率低…

    2025年12月14日
    000
  • Python开发建议:学习并应用数据结构和算法

    在过去的几年里,Python已成为最受欢迎的编程语言之一,因为它易于学习和使用。作为一名Python程序员,您可能发现自己已经掌握了基本语法和一些高级概念。然而,如果您想写出更优秀、高效的程序,我们建议您学习并应用数据结构和算法。 数据结构是一种将数据组织起来存储和操作的方式。数据结构可以影响程序的…

    2025年12月13日
    000
  • Python中的排序算法有哪些?

    Python中常用的排序算法有冒泡排序、插入排序、选择排序、快速排序、归并排序和堆排序等。下面将分别介绍这些排序算法的原理,并给出相应的代码示例。 冒泡排序:冒泡排序是一种简单直观的排序算法。它重复地遍历要排序的列表,比较相邻两个元素大小,并将大的元素向后移动。在每次遍历过程中,最大的元素会“冒泡”…

    2025年12月13日
    000
  • 如何优化Python中的算法和数据结构

    如何优化Python中的算法和数据结构 在编程中,算法和数据结构是非常重要的。一个高效的算法和合适的数据结构可以大大提高程序的性能。而Python作为一种高级编程语言,提供了丰富的库和语法糖,使得编写算法和数据结构变得更加简洁和易读。本篇文章将介绍一些优化Python中算法和数据结构的技巧,并提供具…

    2025年12月13日
    000
  • 如何使用Python实现素数判断的算法?

    如何使用Python实现素数判断的算法? 素数是指只能被1和自身整除的正整数,例如2、3、5、7等。素数的判断是一个常见的算法问题,本文将介绍如何使用Python编写一个简单且高效的素数判断算法。 首先,我们需要明确判断素数的条件。对于一个正整数n,如果存在一个数k,满足2 接下来,我们就可以编写代…

    2025年12月13日
    000
  • 如何使用Python实现Floyd-Warshall算法?

    如何使用Python实现Floyd-Warshall算法? Floyd-Warshall算法是一种用于解决所有源点到所有目标点的最短路径问题的经典算法。它是一种动态规划算法,可用于处理有向图或负权边问题。本文将介绍如何使用Python实现Floyd-Warshall算法,以及提供具体的代码示例。 F…

    2025年12月13日
    000
  • 如何用Python编写插入排序算法?

    如何用Python编写插入排序算法? 插入排序是一种简单直观的排序算法,它的思想是将待排序的数组分为有序部分和无序部分,每次从无序部分中选择一个元素插入到有序部分的正确位置。插入排序算法的实现通常通过多次比较和交换元素来实现,时间复杂度为O(n^2)。 下面我们就来看一下用Python语言如何编写插…

    2025年12月13日
    000
  • 如何用Python编写人工神经网络算法?

    如何用Python编写人工神经网络算法? 人工神经网络(Artificial Neural Networks)是一种模拟神经系统结构和功能的计算模型,它是机器学习和人工智能中重要的一部分。Python是一种功能强大的编程语言,具有广泛的机器学习和深度学习库,如TensorFlow、Keras和PyT…

    2025年12月13日
    000
  • 如何用Python编写求解排列组合的算法?

    如何用Python编写求解排列组合的算法? 简介:在数学和计算机科学中,排列组合是一种常见的数学概念,它可以帮助我们解决许多实际问题。在本文中,我将介绍如何使用Python编写算法来求解排列组合问题,并提供具体的代码示例。 一、排列和组合的定义在开始编写算法之前,我们先来了解一下排列和组合的定义。 …

    2025年12月13日
    000
  • 如何用Python编写桶排序算法?

    如何用Python编写桶排序算法? 引言:桶排序(Bucket Sort)是一种非比较排序算法,其原理是将待排序的元素分到不同的桶中,然后对每个桶中的元素进行排序,最后将所有桶中的元素依次取出即可得到排好序的结果。桶排序适用于待排序的元素在一定范围内且分布均匀的情况,时间复杂度为O(n+k),n表示…

    2025年12月13日
    000
  • 如何用Python编写选择排序算法?

    如何用Python编写选择排序算法? 选择排序是一种简单直观的排序算法,其基本思想是找到最小元素并将其放到已排序部分的末尾,然后从未排序部分中继续寻找最小元素并重复这个过程,直到整个数组排序完成。 下面我们就来具体介绍一下如何用Python编写选择排序算法。 首先,我们定义一个函数select_so…

    2025年12月13日
    000
  • 如何使用Python实现广度优先搜索算法?

    如何使用Python实现广度优先搜索算法? 广度优先搜索(BFS)是一种基本的图搜索算法,用于在图或树中寻找特定节点(或状态)的最短路径。它可以被广泛应用于许多领域,如寻找社交网络中最短的朋友关系链、迷宫问题的解决等。Python提供了强大的数据结构和函数库,使得实现BFS成为一项相对容易的任务。本…

    2025年12月13日
    000

发表回复

登录后才能评论
关注微信