目录
问题陈述
示例
Explanation
解释
解决方案
算法
示例:C++ 程序
输出
时空分析
结论
首页 后端开发 C++ 有害数

有害数

Aug 26, 2023 am 11:17 AM
算法 数学 包括编程 有害数

有害数

如果数字是正整数并且其二进制展开中的设置位数是素数,则该数字被认为是有害的。第一个有害数字是 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 < 2)< 2)

    • 返回错误

  • 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 <iostream>
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 prime
bool is_prime(int count){
   if (count < 2)
   return false;
   for (int i = 2; i * i < count; i++){
      if (count % i == 0)
      return false;
   }
   return true;
}

// this functions states if count of set bits is prime -> pernicious
bool 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 function
int 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++ 程序解决方案以及时间和空间复杂度分析。

以上是有害数的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1676
14
CakePHP 教程
1429
52
Laravel 教程
1333
25
PHP教程
1278
29
C# 教程
1257
24
AI颠覆数学研究!菲尔兹奖得主、华裔数学家领衔11篇顶刊论文|陶哲轩转赞 AI颠覆数学研究!菲尔兹奖得主、华裔数学家领衔11篇顶刊论文|陶哲轩转赞 Apr 09, 2024 am 11:52 AM

AI,的确正在改变数学。最近,一直十分关注这个议题的陶哲轩,转发了最近一期的《美国数学学会通报》(BulletinoftheAmericanMathematicalSociety)。围绕「机器会改变数学吗?」这个话题,众多数学家发表了自己的观点,全程火花四射,内容硬核,精彩纷呈。作者阵容强大,包括菲尔兹奖得主AkshayVenkatesh、华裔数学家郑乐隽、纽大计算机科学家ErnestDavis等多位业界知名学者。AI的世界已经发生了天翻地覆的变化,要知道,其中很多文章是在一年前提交的,而在这一

CLIP-BEVFormer:显式监督BEVFormer结构,提升长尾检测性能 CLIP-BEVFormer:显式监督BEVFormer结构,提升长尾检测性能 Mar 26, 2024 pm 12:41 PM

写在前面&笔者的个人理解目前,在整个自动驾驶系统当中,感知模块扮演了其中至关重要的角色,行驶在道路上的自动驾驶车辆只有通过感知模块获得到准确的感知结果后,才能让自动驾驶系统中的下游规控模块做出及时、正确的判断和行为决策。目前,具备自动驾驶功能的汽车中通常会配备包括环视相机传感器、激光雷达传感器以及毫米波雷达传感器在内的多种数据信息传感器来收集不同模态的信息,用于实现准确的感知任务。基于纯视觉的BEV感知算法因其较低的硬件成本和易于部署的特点,以及其输出结果能便捷地应用于各种下游任务,因此受到工业

使用C++实现机器学习算法:常见挑战及解决方案 使用C++实现机器学习算法:常见挑战及解决方案 Jun 03, 2024 pm 01:25 PM

C++中机器学习算法面临的常见挑战包括内存管理、多线程、性能优化和可维护性。解决方案包括使用智能指针、现代线程库、SIMD指令和第三方库,并遵循代码风格指南和使用自动化工具。实践案例展示了如何利用Eigen库实现线性回归算法,有效地管理内存和使用高性能矩阵操作。

探究C++sort函数的底层原理与算法选择 探究C++sort函数的底层原理与算法选择 Apr 02, 2024 pm 05:36 PM

C++sort函数底层采用归并排序,其复杂度为O(nlogn),并提供不同的排序算法选择,包括快速排序、堆排序和稳定排序。

人工智能可以预测犯罪吗?探索CrimeGPT的能力 人工智能可以预测犯罪吗?探索CrimeGPT的能力 Mar 22, 2024 pm 10:10 PM

人工智能(AI)与执法领域的融合为犯罪预防和侦查开辟了新的可能性。人工智能的预测能力被广泛应用于CrimeGPT(犯罪预测技术)等系统,用于预测犯罪活动。本文探讨了人工智能在犯罪预测领域的潜力、目前的应用情况、所面临的挑战以及相关技术可能带来的道德影响。人工智能和犯罪预测:基础知识CrimeGPT利用机器学习算法来分析大量数据集,识别可以预测犯罪可能发生的地点和时间的模式。这些数据集包括历史犯罪统计数据、人口统计信息、经济指标、天气模式等。通过识别人类分析师可能忽视的趋势,人工智能可以为执法机构

改进的检测算法:用于高分辨率光学遥感图像目标检测 改进的检测算法:用于高分辨率光学遥感图像目标检测 Jun 06, 2024 pm 12:33 PM

01前景概要目前,难以在检测效率和检测结果之间取得适当的平衡。我们就研究出了一种用于高分辨率光学遥感图像中目标检测的增强YOLOv5算法,利用多层特征金字塔、多检测头策略和混合注意力模块来提高光学遥感图像的目标检测网络的效果。根据SIMD数据集,新算法的mAP比YOLOv5好2.2%,比YOLOX好8.48%,在检测结果和速度之间实现了更好的平衡。02背景&动机随着远感技术的快速发展,高分辨率光学远感图像已被用于描述地球表面的许多物体,包括飞机、汽车、建筑物等。目标检测在远感图像的解释中

九章云极DataCanvas多模态大模型平台的实践和思考 九章云极DataCanvas多模态大模型平台的实践和思考 Oct 20, 2023 am 08:45 AM

一、多模态大模型的历史发展上图这张照片是1956年在美国达特茅斯学院召开的第一届人工智能workshop,这次会议也被认为拉开了人工智能的序幕,与会者主要是符号逻辑学届的前驱(除了前排中间的神经生物学家PeterMilner)。然而这套符号逻辑学理论在随后的很长一段时间内都无法实现,甚至到80年代90年代还迎来了第一次AI寒冬期。直到最近大语言模型的落地,我们才发现真正承载这个逻辑思维的是神经网络,神经生物学家PeterMilner的工作激发了后来人工神经网络的发展,也正因为此他被邀请参加了这个

算法在 58 画像平台建设中的应用 算法在 58 画像平台建设中的应用 May 09, 2024 am 09:01 AM

一、58画像平台建设背景首先和大家分享下58画像平台的建设背景。1.传统的画像平台传统的思路已经不够,建设用户画像平台依赖数据仓库建模能力,整合多业务线数据,构建准确的用户画像;还需要数据挖掘,理解用户行为、兴趣和需求,提供算法侧的能力;最后,还需要具备数据平台能力,高效存储、查询和共享用户画像数据,提供画像服务。业务自建画像平台和中台类型画像平台主要区别在于,业务自建画像平台服务单条业务线,按需定制;中台平台服务多条业务线,建模复杂,提供更为通用的能力。2.58中台画像建设的背景58的用户画像

See all articles