数论——数数(找质因数个数),三位出题人(组合数学,快速幂)

数数(找质因数个数)

题目描述

登录—专业IT笔试面试备考平台_牛客网

运行代码(通过率一半)

#include <iostream>  
#include <vector>  using namespace std;  const int N=5e6+6;
int n;
vector<bool>vis;
void prime(){for(int i=2;i*i<=n;i++){if(!vis[i]){for(int j=i*i;j<=n;j+=i){vis[j]=true;}}}
}
int main(){cin>>n;vis.assign(n+1,false);prime();int ans=0;for(int i=2;i<=n;i++){if(!vis[i]){int t=i;while(t<=n){ans++;t*=i;}}}cout<<n-1-ans;return 0;
}

代码思路

  1. const int N = 5e6 + 6;:定义了一个常量 N,其值为 5000006,可能是为了确保在处理数据时,数组或其他数据结构有足够的空间。

  2. int n;:用于存储用户输入的整数,代表要进行计算的范围上限。

  3. vector<bool> vis;:一个布尔类型的向量,用于标记整数是否为非素数。初始时假设所有的数都是素数(通过 vis.assign(n + 1, false); 将所有元素初始化为 false)。

  4. void prime() 函数:

    • 这个函数的作用是筛选出小于等于 n 的非素数。
    • 外层循环从 2 开始遍历到 sqrt(n)。对于每个数 i,如果 vis[i] 为 false,说明 i 是素数。
    • 内层循环从 i*i 开始,将 i 的倍数标记为非素数(即 vis[j] = true;)。这是因为小于 i*i 的倍数在之前的遍历中已经被标记过了。
  5. int main() 函数:

    • 首先,从用户输入读取整数 n
    • 调用 vis.assign(n + 1, false); 初始化 vis 向量,将所有元素初始化为 false,表示初始时都假设所有的数都是素数。
    • 调用 prime() 函数进行素数筛选。
    • 然后通过一个循环遍历从 2 到 n 的所有整数。对于每个数 i,如果它是素数(即 !vis[i]),则进行以下操作:
      • 定义一个变量 t 并初始化为 i
      • 通过一个内层循环,不断将 t 乘以 i,并统计以 i 为底数的整数次幂且小于等于 n 的数的个数(每次循环 ans 加一)。
    • 最后,输出 n - 1 - ans,其中 n - 1 是因为总数 n 中减去了 1,再减去 ans 是为了去掉既是完全平方数又是某个数的整数次幂的数的个数。

运行代码(正确)

#include <iostream>  
#include <vector>  using namespace std;  const int N=5e6+6;
int n;
vector<bool>vis;
void prime(){for(int i=2;i*i<=n;i++){if(!vis[i]){for(int j=i*i;j<=n;j+=i){vis[j]=true;}}}
}
int main(){cin>>n;vis = vector<bool>(n+1);prime();int ans=0;for(long long i = 2;i<=n;i++){if(!vis[i]){for(long long j = i;j<=n;j*=i)ans++;}}cout<<n-1-ans;return 0;
}

修改了部分代码

    for(long long i = 2;i<=n;i++)
    {
        if(!vis[i])
        {
            for(long long j = i;j<=n;j*=i)
                ans++;
        }
    }

代码思路

这段代码的目的是计算在 1 到 n 的范围内,减去既是完全平方数又是某个数的整数次幂的数后剩余的数的个数。

  1. prime 函数:

    • 这个函数用于筛选出小于等于 n 的所有非素数。
    • 它从 2 开始遍历到 sqrt(n)。对于每个未被标记为非素数的数 i,将其倍数(从 i*i 开始,因为小于 i*i 的倍数在之前的遍历中已经被标记过了)标记为非素数。这样在遍历结束后,vis 数组中标记为 false 的位置对应的数就是素数。
  2. main 函数:

    • 首先,从用户输入获取 n 的值。
    • 初始化 vis 数组为长度 n + 1 的布尔型向量,初始值都为 false,表示初始时都假设所有的数都是素数。
    • 调用 prime 函数进行素数筛选。
    • 然后通过双重循环来计算满足条件的数的个数。外层循环从 2 遍历到 n,对于每个数 i,如果它是素数(即 !vis[i]),则进入内层循环。内层循环从 i 开始,每次乘以 i,直到超过 n 为止,每次循环都增加 ans 的值。这个过程实际上是在计算以素数 i 为底数的整数次幂且小于等于 n 的数的个数。
    • 最后,输出 n - 1 - ans,即 n 减去既是完全平方数又是某个数的整数次幂的数的个数再减去 1(因为 1 也被包含在总数 n 中)。

三位出题人(组合数学,快速幂)

题目描述

登录—专业IT笔试面试备考平台_牛客网

运行代码

#include <iostream>
using namespace std;
using ll = long long;
const int N = 1000000007;ll qmi(ll a, ll b) {ll res = 1;while (b) {if (b & 1) res = res * a % N;a = a * a % N;b >>= 1;}return res % N;
}int main() {int t;cin >> t;while (t--) {ll n, m;cin >> n >> m;ll temp = (qmi(2, m) - 2 + N) % N;cout << qmi(temp, n) << endl;}return 0;
}

代码思路

  1. qmi 函数是用来快速计算整数 a 的 b 次幂对 N(这里 N 是 1000000007)取模的结果。
    • 通过位运算的技巧,每次将指数 b 右移一位,如果此时 b 的最低位为 1,则将当前结果 res 乘以 a,并对 N 取模。
    • 同时,将 a 自乘,也对 N 取模,这样逐步计算出 a 的 b 次幂对 N 的余数。
  2. 首先读取测试用例的数量 t
  3. 对于每个测试用例:
    • 读取题目数量 n 和人数 m
    • 计算 qmi(2, m),表示 m 个人,每个人有两种选择(参与某个题目或不参与),那么总共有 2^m 种情况。
    • 但是这里要排除两种不合法的情况,即所有人都不参与任何题目和所有人都只参与一个题目(这样不符合每个题都应有至少一个人参与的条件),所以减去 2。由于结果可能为负数,加上 N 确保结果为正数,然后对 N 取模,得到 (qmi(2, m) - 2 + N) % N
    • 最后将这个结果作为新的底数,题目数量 n 作为指数,再次调用 qmi 函数,得到最终的分配任务方案数,并输出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/433637.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vmware-toolbox安装,VMware虚拟机访问win10共享目录

问题&#xff1a;VMware界面无法安装vmware-toolbox&#xff0c;共享目录设置失败 解决方法&#xff1a; VMware设置 共享文件夹 ubuntu24 vm中运行vmware-toolbox-cmd -v 检查版本 vm运行sudo apt install open-vm-tools // vm可能需要重启 vm的 /mnt 目录下如果没有 hgfs…

骨传导耳机哪个牌子好?年度五大热门骨传导耳机推荐清单来了!

近年来&#xff0c;骨传导耳机以其独特的传音方式和开放耳道的设计&#xff0c;逐渐成为运动爱好者和追求健康生活方式人群的新宠。与传统耳机相比&#xff0c;骨传导耳机不仅能够保护听力&#xff0c;还能在享受音乐的同时保持对周围环境的警觉。 随着骨传导耳机市场的不断壮…

1.MySQL的安装

目录 下载安装包 安装前环境的准备 正式安装 下载安装包 MySQL安装网址:https://www.mysql.com/cn/ 进去之后就是上面这个页面&#xff0c;进行汉化的时候将这个网页拉至最下&#xff0c;右下角点成中文就可以&#xff0c;如下这个页面。 回到页面顶端&#xff0c;点击下载&a…

并发编程---线程与进程

业务场景&#xff1a;小明去理发店理发。 小明去理发店理发&#xff0c;完成理发需要吹&#xff0c;剪&#xff0c;洗、理的过程。由这个场景我们引用进程和线程这两个 概念。 一.进程 1.什么是进程 进程是具有独立功能的程序关于某个数据集合上的一次运行活动&#xff0c;是…

基于Hadoop的NBA球员大数据分析及可视化系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

MySQL InnoDB MVCC数据结构分析

1、概述 MVCC&#xff08;Multiversion Concurrency Control&#xff09;多版本并发控制&#xff0c;通过维护不同的版本号&#xff0c;提供一种很好的并发控制技术&#xff0c;这种技术能够使读写操作不冲突&#xff0c;提升并发性能。 MySQL InnoDB存储引擎&#xff0c;在更…

Colorful/七彩虹将星X17 XS 22 Win11原厂OEM系统 带COLORFUL一键还原

安装完毕自带原厂驱动和预装软件以及一键恢复功能&#xff0c;自动重建COLORFUL RECOVERY功能&#xff0c;恢复到新机开箱状态。 【格式】&#xff1a;iso 【系统类型】&#xff1a;Windows11 原厂系统下载网址&#xff1a;http://www.bioxt.cn 注意&#xff1a;安装系统会…

设计模式、系统设计 record part02

软件设计模式&#xff1a; 1.应对重复发生的问题 2.解决方案 3.可以反复使用 1.本质是面向对象 2.优点很多 1.创建型-创建和使用分离 2.结构型-组合 3.行为型-协作 571123种模式 UML-统一建模语言-Unified Modeling Language 1.可视化&#xff0c;图形化 2.各种图&#xff08;9…

服务器操作系统【sar 命令】

sar 安装、语法参数说明以及示例 文章目录 功能概述一、功能介绍1.安装配置2. 配置3. 启动二、sar 语法及参数说明三、示例及释义1.汇报 io 传输速率信息2.内存分页信息3.块设备状态信息4.hugepages 利用率统计信息5.列长度和负载平均值6.内存利用率统计信息7.swap 交换空间利用…

ARM点灯---看手册

知识点&#xff1a; 一个程序可能会遇到内存泄漏问题&#xff0c;可能一次运行泄漏几M大小&#xff0c;执行几个小时才会泄漏到站崩溃&#xff0c;所以要查看是否有内存泄漏。 查看手册教程 0927-上午 视频1&#xff1a;25&#xff1b;00 硬件程序开发流程 最小系统:单片…

16.第二阶段x86游戏实战2-发包函数和怎么去找改写过的发包函数

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…

使用celery+Redis+flask-mail发送邮箱验证码

Celery是一个分布式任务队列&#xff0c;它可以让你异步处理任务&#xff0c;例如发送邮件、图片处理、数据分析等。 在项目中和celery 有关系的文件如下&#xff1a; task.py : 创建celery.py 对象&#xff0c;并且添加任务&#xff0c;和app绑定&#xff0c;注意&#xff1…

实习前学一学git

工作区 暂存区 本地仓库 远程仓库 git commit -m "提交信息" 提交的是暂存区里的内容&#xff0c;没有git add 的不会被提交到本地仓库

对抗攻击方法详解:梯度攻击、转移攻击与模型集成攻击

对抗攻击方法详解&#xff1a;梯度攻击、转移攻击与模型集成攻击 近年来&#xff0c;随着深度学习模型在各个领域取得惊人突破&#xff0c;对抗攻击&#xff08;Adversarial Attack&#xff09; 逐渐成为研究热点。对抗攻击旨在通过在输入数据上施加精心设计的微小扰动&#x…

这样做快速除甲醛入住新家 科学分解甲醛的产品哪个好

这样做快速除甲醛入住新家 科学分解甲醛的产品哪个好 在新房装修的喜悦之余&#xff0c;业主们不得不面对一个常见却又棘手的问题——甲醛污染。甲醛&#xff0c;这种无形的敌人&#xff0c;以其难以察觉的存在&#xff0c;对家人和孩子的健康造成潜在威胁。很多业主们在装修期…

ArcEngine C#二次开发图层处理:根据属性分割图层(Split)

需求&#xff1a;仅根据某一属性&#xff0c;分割图层&#xff0c;并以属性值命名图层名称保存。 众所周知&#xff0c;ArcGIS ArcToolbox中通过Split可以实现图形分割一个图层&#xff0c;以属性值命名图层&#xff0c;如下图所示。 本文仅仅依据属性值&#xff0c;将一个shp…

InfiniiVision 3000T X 系列示波器

InfiniiVision 3000T X 系列示波器 综述 3000T X 系列示波器外形更为小巧&#xff0c;并配有简明直观的触摸屏用户界面&#xff0c;为您带来高端测量技术。 凭借其出色的波形捕获率&#xff0c;您可以捕获在其他示波器上无法捕获的偶发毛刺和异常。 3000T X 系列示波器搭配了…

猫头虎带你解决:error Error: certificate has expired

&#x1f42f;猫头虎带你解决&#xff1a;error Error: certificate has expired &#x1f4a5; 今天有粉丝问猫哥&#xff1a;“&#x1f42f;猫头虎&#xff0c;我在 Node.js 项目中使用 Yarn 安装包时遇到了一个错误&#xff1a;Error: certificate has expired。你能帮忙解…

Android Studio 真机USB调试运行频繁掉线问题

一、遇到问题 Android Studio使用手机运行项目时&#xff0c;总是频繁掉线&#xff0c;连接很不稳定&#xff0c;动不动就消失&#xff0c;基本上无法使用 二、问题出现原因 1、硬件问题&#xff1a;数据线 换条数据线试试&#xff0c;如果可以&#xff0c;那就是数据线的…

TortoiseGit 下载和安装

下载 1&#xff0c;下载路径 Download – TortoiseGit – Windows Shell Interface to Git 2&#xff0c;选择windows64的&#xff0c; 3&#xff0c;下载完成后 安装 1&#xff0c;双击运行&#xff0c;点击next 2&#xff0c;点击next 3&#xff0c;点击next 4&#xff0…