实验1-2

news/发布时间2024/8/25 18:58:52

实验1-2

如题:

思路:

使用动态规划的思想(DP思路,即一个大一点规模的问题可以被拆解为更小的,更容易解决的问题)

首先,定义一个数组 dp,用来存储每个数的分解式个数。 dp[i] 表示当前数 i 的不同分解式的个数。

接下来,从数 2 开始循环,逐个计算每个数的分解式个数。dp[i] = 0,防止数组越界。

然后,通过枚举当前数的所有因子来计算分解式个数。使用一个内部循环,从因子

j = 1 开始,一直到 i/2(因为因子的最大可能值是 i/2)。对于每个因子 j,计算

i % j == 0。如果是整除关系,说明 j 是 i 的一个因子。

在这种情况下,我们根据递推公式 dp[i] += dp[j] 来计算当前数的分解式个数。dp[j] 表示之前计算的拥有因子 j 的数的分解式个数。

根据递推公式,我们将之前计算的结果 dp[j] 累加到 dp[i] 上。这样就实现了动态规划的思想,利用已知的结果计算新的结果。

最后,循环结束后,返回数组 dp[n] 的值,即正整数 n 的不同分解式的个数。

代码:

以n=12,

第十一次循环(i = 12):

  • dp[12] = 0
  • 内层循环(j = 1):12 % 1 == 0,所以 dp[12] += dp[1] = 0 + 1 = 1
  • 内层循环(j = 2):12 % 2 == 0,所以 dp[12] += dp[2] = 1 + 1 = 2
  • 内层循环(j = 3):12 % 3 == 0,所以 dp[12] += dp[3] = 2 + 1 = 3
  • 内层循环(j = 4):12 % 4 == 0,所以 dp[12] += dp[4] = 3 + 2 = 5
  • 内层循环(j = 5):12 % 5 != 0,跳过
  • 内层循环(j = 6):12 % 6 == 0,所以 dp[12] += dp[6] = 5 + 3 = 8
  • 内层循环完毕
  • dp[12] = 8
#include<stdio.h>int countSum(int n){int dp[n+1]; //存储每个数的分解式个数dp[1] = 1;  // 输入 1 的时候为 1for(int i = 2; i <= n; i++){dp[i] = 0;  //用 dp[j] 计算 dp[i]for(int j = 1; j <= i/2; j++){ //因子的最大可能值是 i/2, 题目意思防止 1*12,,12*1if(i % j == 0){           //整除关系,说明 j 是 i 的一个因子//dp[i] 则是待计算的当前数 i 的分解式个数, dp[j] 表示之前计算的拥有因子 j 的数的分解式个数dp[i] += dp[j];      //一个数的分解式个数等于因子的分解式个数之和}}}return dp[n];
}int main(){int n;scanf("%d", &n);int count = countSum(n);printf("%d", count);return 0;}

很好,随机测试几个数,没啥问题,复制粘贴

好好好

最后一个测试点超时

做出一些修改

j 因子的范围从1到 i/2 改为2到 根号i

j 因子,对应的因子 i/j( !=j ),并将两个因子的分解式个数都累加到dp[i]中

    for(int i = 2; i <= n; i++){dp[i] = 1;  //用 dp[j] 计算 dp[i]int limit = sqrt(i);for(int j = 2; j <= limit; j++){ //因子的最大可能值是根号 iif(i % j == 0){           //整除关系,说明 j 是 i 的一个因子//dp[i] 则是待计算的当前数 i 的分解式个数, dp[j] 表示之前计算的拥有因子 j 的数的分解式个数int other_factor = i / j;dp[i] += dp[j];if(other_factor != j){    //因子 i/j(!=j),将两个因子的分解式个数都累加到dp[i]中dp[i] += dp[other_factor];}}}}

n的取值越大还是耗时小高,但是过了所有测试点


使用递归

#include <stdio.h>int total = 0;void solve(int n) {if (n == 1)total++;else {for (int i = 2; i <= n; i++)if (n % i == 0)solve(n / i);}
}int main() {int n;scanf("%d", &n);solve(n);printf("%d", total);return 0;
}

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

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

相关文章

移动光猫拨号(路由模式)下的IPV6获取方式

按图设置即可1、设置拨号连接,获取前缀2、将前缀填写到用户侧的IPV6设置里3、测试ipv6 或者:在哪里获取前缀,前缀在哪里出现的 设置完,等候5分钟,去 状态页找前缀信息。本文来自博客园,作者:木子欢儿,转载请注明原文链接:https://www.cnblogs.com/HGNET/p/17852237.h…

Unity异常提示 Invalid worldAABB. Object is too large or too far away from the orgin.

Unity在编辑器退出EditMode进入PlayMode之前,调用了一次Start和Update,然后提供了空的数据。 这个时候容易造成除以0的情况,但是Unity没有立刻抛出异常,而是继续执行,生成了一个无穷大的数值。

PE权威指南学习笔记

目录GitHubPE权威指南随书源码WinHex PE权威指南学习笔记: GitHubPE权威指南 全书翻译为MD,方便做笔记和检索随书源码 分为C和ASM版,已做注释 ASMCWinHex 对PE文件进行标注

触达云屏介绍

触达云屏介绍 零代码/低代码 数据可视化平台 接入ERP、MES、OA、HR、PMS、物联网平台等系统业务数据,轻松实现数据可视化报表 / 大屏、数据门户、物联网云组态,降低成本,创造利润 官网:http://chudayun.com/ 视频教程: 点击观看使用教程 触达云屏-低代码数据API开发文档 使…

Spring_2023_11_23_1 Spring--整合JDBC===》JdbcTemplate

Spring--整合JDBC===》JdbcTemplateList query(String sql, RowMapper rowMapper, @Nullable Object... args)String sql 执行的sql语句,可以使用占位符 RowMapper 接口: 2.1 mapRow(ResultSet rs, int rowNum) : 查询出数据的每一行的映射 2.1.1 ResultSet rs :结果中存储的…

P4180 [BJWC2010] 严格次小生成树

108908662_p0如果有两条在最小生成树上的边被换掉了,那么原树会被分成三个连通块。 考虑新加的两条边,保留权值较小的那一条,这样还剩两个连通块。而删除的两条边至少有一条能连通这两个连通块,所以可以保留那条边。 并且新加的两条边中权值较大的那一条肯定大于等于我们保…

RISC-V微控制器与嵌入式系统

RISC-V微控制器与嵌入式系统 Gigadevice GD32VW553 RISC-V微控制器支持WiFi 6和蓝牙5.2 LE Gigadevice GD32VW553是一款适用于物联网应用的新型160MHz RISC-V微控制器,支持WiFi 6(802.11ax)和蓝牙5.2低能耗(LE),有QFN32和QFN40封装,最多可提供28个GPIO。 下图表示risc-v…

Centos7安装Redis(超详细)与Redis的使用

参考:https://blog.csdn.net/qq_44861126/article/details/129135531因为相信,所以看见.

Power BI - 5分钟学习将表第一行设置为标题列名

每天5分钟,上一篇介绍了如何将Excel导入Power BI作为数据源。但是有的同学已经发现,导入的Excel数据在Power BI最右侧Data区域可以正常显示,但是全都没有列名。那么我们如何解决这个问题呢?第2天 - 如何将导入Power BI表的第一行设置为标题列名:1, 【Home】 -> 【Trans…

双网卡绑定-bond

双网卡绑定-bond Linux知识积累 2023-10-19 08:00 发表于山东收录于合集#centos71个 #双网卡绑定1个 #bond1个 #主备1个 #负载均衡1个下述操作均在centos7.6系统下测试 1. 双网卡绑定的7种模式 一般mode=0与mode=1比较常用,mode=6负载均衡方式两块网卡都工作,不需要交换机支持…

微服务 Gateway 网关——路由断言工厂

路由断言工厂 Route Predicate Factory 我们在配置文件中写的断言规则只是字符串,这些字符串会被 Predicate Factory 读取并处理,转变为路由判断的条件

入门 Dart 编程:为 Flutter 开发应用打下基础 审核中

前言:Dart 是一门现代化的、多用途的编程语言,最为广泛应用于移动应用开发中的 Flutter 框架。本篇博客旨在为初学者提供 Dart 编程的基础概念,为进一步探索 Flutter 开发打下坚实基础。 DartPad 演示 🎯首先,让我们熟悉 DartPad,这是一个在线沙盒,用于测试 Dart 代码。…

system.map文件中各符号含义

如下图,红圈圈出来的符号含义是什么? 上述符号可以从该网站找到定义:Binutils - GNU Project - Free Software Foundation (像编译器的编译选项等也可以在该网站中找到说明)

redhat root密码重置

1.启动菜单界面上下键选到第一项 按“e”键进入编辑模式; 2、光标移动到开头为Linux16的行,按键盘End键行跳转到行末,行末写入内容rd.break或者rd.break console=tty0 写入内容完成后按Ctrl+X来运行修改后的内核程序;3、重新挂载根目录并给予读写权限(否则无法重置密码);…

算法学习笔记(40): 具体数学

具体数学 本文是阅读《具体数学》产生的理解性文本,并且涵盖了部分其他相关的内容。 不怎么重要或者太难的东西因为时间问题,我略过了。 本文来之不易,请勿机械搬运:原文地址 - https://www.cnblogs.com/jeefy/p/17848037.html 目录具体数学第二章 - 和式和式的处理有限微积…

jmeter中断言失败后不继续执行后续的取样器,以及失败事务个数的统计

需要实现的场景:N款产品自动投保,需要统计成功投保的有多少款,失败投保的有多少款?遇到的问题处理:问题一、某款产品投保时,若其中一个接口断言失败,如何让后续接口不继续执行? 答:通过if控制器进行处理, 问题二:如何解决统计失败或成功执行的产品数? 答:通过事务…

Excel 操作

数据验证 数据 -> 数据验证 -> 输入验证条件本文来自博客园,作者:VipSoft 转载请注明原文链接:https://www.cnblogs.com/vipsoft/p/17848880.html

《安富莱嵌入式周报》第327期:Cortex-A7所有外设单片机玩法LL/HAL库全面上线,分享三款GUI, PX5 RTOS推出网络协议栈,小米Vela开源

周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 1、2023 Hackaday大赛胸牌开源Vectorscope-main.zip (66.83MB) https://github.com/Hack-a-Day/Vectorscope 前段时间分享后,好几个网友咨询这个胸牌有没有开源…

5G CPE

5G CPECPE全称叫做Customer Premise Equipment,业内称之为“客户终端设备”。Premise有“前提、假设”的意思,更准确的翻译应该是“客户前端设备”。 所谓“前端”,指的是在终端设备(如智能手机、平板、电脑等)的“前面”。作用是将移动网络信号(4G、5G等)或有线宽带信号…
推荐文章