当前位置: 首页 > news >正文

洛谷题单指南-进阶数论-P3861 拆分

原题链接:https://www.luogu.com.cn/problem/P3861

题意解读:将整数n拆分成不同因数之积的方案数,不含1*n的情况。

解题思路:

1、背景知识-超级合数

n的数据范围最大是10^12,尽管n很大,但是n以内的整数的约数个数最多是多少呢?

在数论中通常可以查询超级合数表来计算:超级合数介绍

查表可以,不超过10^12的超级合数是:

963761198400 2*2*2*2*2*2*3*3*3*3*5*5*7*11*13*17*19*23 6720

6720就是963761198400的约数个数,这个就是最多的约数个数。

有此基础,问题就好办了!

2、问题分析

对于一个整数n,先分解出所有的约数(包括1和n),存入数组a[],一共是cnt个,并对约数从小到大排序;

再定义一个数组pos[],用来存每个约数对应a中的下标,需要注意约数中在1~sqrt(n)内的不超空间,sqrt(t)~n范围内可能超空间,可以分开两个数组,对sqrt(t)~n范围的数进行hash处理,这里直接统一用map处理。

接下来用线性动态规划来解决,

状态定义:设f[i][j]表示将a[i]拆解成a[1]~a[j]之积的方案数,根据约数个数最大6720,数组开f[10000][10000]即可

状态转移:

对于f[i][j],主要看最后一个a[j]是否包含在a[i]拆解的约数之中

如果不包含a[j],必然不选a[j],则有f[i][j] = f[i][j - 1]

如果包含a[j],可以选也可以不选a[j],则有f[i][j] = f[i][j - 1] + f[pos[a[i] / a[j]]][j - 1]

初始化:f[1][1] = 1

结果:f[cnt][cnt] - 1,减一是因为排除1 * n的情况

100分代码:

#include <bits/stdc++.h>
using namespace std;typedef long long LL;
const int N = 10000, M = 1000000;
LL a[M], cnt;
unordered_map<LL, int> pos;
int f[N][N];
int t;int main()
{cin >> t;while(t--){cnt = 0;memset(f, 0, sizeof(f));LL n;cin >> n;for(int i = 1; i <= n / i; i++){if(n % i == 0){a[++cnt] = i;if(i != n / i) a[++cnt] = n / i;}}sort(a, a + cnt + 1);for(int i = 1; i <= cnt; i++) pos[a[i]] = i;f[1][1] = 1;for(int i = 1; i <= cnt; i++){for(int j = 2; j <= cnt; j++){f[i][j] = f[i][j - 1];if(a[i] % a[j] == 0) f[i][j] += f[pos[a[i] / a[j]]][j - 1];}}cout << f[cnt][cnt] - 1 << endl;}return 0;
}

 

http://www.hskmm.com/?act=detail&tid=18098

相关文章:

  • AI工作流详解以及应用场景(AI)
  • 20250820_浙江省职业职工技能竞赛_crypto
  • 非结构网格中计算场梯度的手段比较
  • 第一章pytorch安装
  • 钡铼技术:2025工业智能体元年,盘点已推出的工业AI大模型总有一款适合您
  • 微算法科技(NASDAQ MLGO)使用基于深度学习的物理信息神经网络(PINN),增强区块链IoT网络交易中的入侵检测
  • 【MySQL】XML中基于已有查询代码,进一步做汇总统计
  • 别再一张证件照用到底了,我建了个“个人形象库”
  • Vue3.5 + Node.js + Express 实现完整登录注册鉴权流程
  • 【SPIE出版】第七届地球科学与遥感测绘国际学术会议(GRSM 2025)
  • ARL(灯塔)安装步骤--超简单!!
  • 实用指南:Java基础(十四):枚举类详解
  • 传统开水壶升级智能水壶低成本开发方案WT588F02KD-32N
  • 基于MATLAB的经典车辆路径问题(VRP)求解方法详解
  • kali复现arp欺骗
  • VGGT: Visual Geometry Grounded Transformer
  • 嵌入式入门,基于keil5用stm32寄存器和标准库实现LED流水灯
  • AI agent编程随记
  • 小人鱼的数学题 - Li
  • 再见 Claude Code!玩转 CodeX CLI 的 16 个实用小技巧,效率拉满!!
  • 【IEEE出版】第五届电气工程与机电一体化技术国际学术会议(ICEEMT 2025)
  • [新教程] Linux服务器使用fail2ban防止远程恶意连接
  • PowerMill 2026安装包下载与Autodesk Powermill2026安装教程
  • [新教程] Linux服务器修改ssh服务端口
  • 《嵌入式驱动(二):驱动编写基本概念》
  • 一站式电竞平台解决方案:数据、直播、源码,助力业务飞速启航 - 数据服务
  • nfs故障排查
  • 数字信封
  • 程序员的内容创作利器:深度解析小红书爆款笔记生成提示词
  • Unigine整合Myra UI Library全纪录(2):渲染