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

news2024/9/28 2:50:08

数数(找质因数个数)

题目描述

登录—专业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.coloradmin.cn/o/2172027.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自定义认证过滤器和自定义授权过滤器

目录 通过数据库动态加载用户信息 具体实现步骤 一.创建数据库 二.编写secutity配置类 三.编写controller 四.编写服务类实现UserDetailsService接口类 五.debug springboot启动类 认证过滤器 SpringSecurity内置认证流程 自定义认证流程 第一步:自定义一个类继承Abstra…

AFSim仿真系统 --- 系统简解_01(任务模块)

任务 任务是AFSIM的基线可执行文件。通过任务&#xff0c;用户可以访问世界仿真框架&#xff08;WSF&#xff09;。该可执行文件&#xff08;mission.exe&#xff09;解释文本格式的仿真输入文件&#xff08;场景&#xff09;&#xff0c;以生成仿真&#xff0c;并可选择以多种…

c语言中的杨氏矩阵的介绍以及元素查找的方法

杨氏矩阵&#xff1a;是一个二维数组 特点&#xff1a;数组的每行从左到右都是递增的 数组的每列从上到下都是递增的 这种矩阵结构使得在查找特定元素时&#xff0c;可以利用其 递增性质来缩小范围&#xff0c;提高查找效率。 从杨氏矩阵中对元素进行查找 1&#xff0c;要求…

沟通技巧对班组长的工作效率有什么影响?

在企业管理的细微脉络中&#xff0c;班组长作为基层管理的中坚力量&#xff0c;其工作效率直接影响着整个生产线的流畅度与团队士气。而沟通技巧&#xff0c;作为人际交往的桥梁&#xff0c;不仅在日常交流中扮演着重要角色&#xff0c;更在班组管理中发挥着不可替代的作用。本…

Bigemap Pro首发(一款真正全面替代Arcgis的国产基础软件)

Bigemap Pro是一款功能强大的计算机数据要素辅助设计(Computer-Aided Data Elements Design CADED)软件&#xff0c;由成都比格图数据处理有限公司研发设计&#xff0c;主要应用在数据要素设计领域&#xff0c;为各行业提供安全可靠高效易用的数据要素设计类国产化基础软件。Bi…

2024年汉字小达人区级自由报名倒数4天:最新问题和今年比赛方式和题型解析

今天是2024年第十一届汉字小达人的区级自由报名活动的第三天&#xff0c;也是倒数第四天。 今天是星期五&#xff0c;通常孩子们放学会早一点。接下来是周六有一整天的时间可用&#xff0c;周日、周一又要上课了&#xff0c;所以实际上可用的较多的备考时间就是今天晚上和明天…

华为OD机试 - 西天取经 - 广度优先搜索BFS(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

windows上设置某exe开机自启动。亲测有效

亲测有效方法 1。通过文件夹启动 0。先创建exe的快捷方式 1。 winR 2。输入shell::startup 3.将exe的快捷方式复制或拖动到打开的文件夹 通过启动文件夹 创建您的EXE文件的快捷方式。 打开文件资源管理器&#xff0c;导航到 C:\Users\YourUsername\AppData\Roaming\Microsoft\…

CORE MVC 过滤器 (筛选器)

MVC FrameWork MVCFramework MVC Core 过滤器 分 同步、异步 1、 授权筛选器 IAuthorizationFilter&#xff0c;IAsyncAuthorizationFilter 管道中运行的第一类筛选器&#xff0c;用来确定发出请求的用户是否有权限发出当前请求 2、资源筛选器 IResourceFilter &#xff0c;…

操作系统 概论

1. 操作系统★ 1.1. 定义 操作系统(Operating System,简称OS)是一种计算机系统软件(计算机软件可以分为系统软件、支撑软件和应用软件三类),他管理和控制计算机硬件和软件资源,并合理地组织调度计算机工作和资源分配,以提供给用户和其他软件方便的接口和环境。 1.2. …

OpenAI研究员、思维树作者姚顺雨专访:人生是一场无限流游戏丨独家

「人生所有重大的选择&#xff0c;无论买房、选择工作&#xff0c;去做任何事情&#xff0c;都像一个文字游戏。从哲学的角度来看&#xff0c;人生就是一个无限流游戏&#xff0c;每天你都有很多选择&#xff0c;从某种程度上说是非常high level、 open-ended的。」 谈及过往研…

前端基础面试题·第四篇——Vue(其一)

1.v-if 和 v-show的区别 在Vue中这两个命令都用于控制元素的显示与隐藏。 (1) v-if 动态控制元素显示与隐藏&#xff0c;本质上是动态销毁或者重建元素&#xff0c;会触发浏览器重排与重绘。在切换状态时有一个局部编译/卸载的过程会适当重建或者销毁内部的事件监听、子组件。…

这五本大模型书籍,让你从大模型零基础到精通,非常详细收藏我这一篇就够了

大模型&#xff08;Large Language Models, LLMs&#xff09;是近年来人工智能领域的一大热点&#xff0c;它们在自然语言处理、对话系统、内容生成等多个方面展现出了强大的能力。随着技术的发展&#xff0c;市面上出现了许多介绍大模型理论与实践的书籍&#xff0c;为研究人员…

碳性电池和碱性电池的区别

碳性电池和碱性电池是两种常见的电池类型&#xff0c;它们在多个方面存在显著的差异。下面是它们之间的一些主要区别&#xff1a; 1. 化学组成 碳性电池&#xff0c;又称为锌锰电池。通常使用二氧化锰作为正极材料&#xff0c;锌作为负极材料&#xff0c;并且电解质为酸性的NH4…

产品推介——SOP4 随机相位可控硅光耦KLM305X

产品描述Product Description KLM305X 系列由一个砷化镓红外发光二极管和一个单晶硅芯片的随机相位光电双向晶闸管组成的可控硅光电耦合器&#xff0c;它被设计用于连接电子控制和功率双向可控硅开关&#xff0c;以控制115至240VAC工作电压下的电阻和感应负载。 功能图Functi…

【一文读懂】C#如何实现通用的排序功能

目录 通用排序功能 1.升序 2.降序 测试 1.测试代码 2.测试结果 本篇文章来分享一下C#如何实现通用的排序功能。在项目中经常会使用到排序的方法&#xff0c;那如何使排序方法更加通用呢&#xff1f;可以通过泛型&#xff0c;接口&#xff0c;委托来实现。 通用排序功能…

【移植】Combo解决方案之W800芯片移植案例

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 持续更新中…… 本方案基于 OpenHarmony LiteOS-M 内核&#xff0c;使用联盛德 W80…

2024年项目经理不能错过的开源项目管理系统大盘点:全面指南

在2024年&#xff0c;随着项目管理领域的不断发展&#xff0c;开源项目管理系统成为了项目经理们提升工作效率的利器。本文将全面盘点几款备受推荐的开源项目管理系统&#xff0c;帮助项目经理们找到最佳选择&#xff0c;不容错过。 在项目管理日益复杂的今天&#xff0c;开源项…

Linux应急响应技巧整理

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330&scene21#wechat_redirect 《网安面试指南》…

是否是递增的字符串(c语言)

1 其功能是:判断t所指字符串中的字母是否由连续递增字母序列组成 (字符串长度大于等于2)。 例如:字符串: uvwxyz满足要求; 而字符串: uvxwyz不满足要求。 2.我们先输入字符串&#xff0c;然后进行判断是否a[i]1a[i1]&#xff0c;如果是则是由连续字母组成的字符串&#xf…