题意:

求 S(N,M)S(N,M)S(N,M) 的个数,x∈S(N,M)x\in S(N,M)x∈S(N,M) 当且仅当 xxx 的约数个数为 nnn,且所有的质因数均小于等于第 MMM 个质数。(1≤N≤2∗106,1≤M≤109)(1\leq N\leq 2*10^6,1\leq M\leq 10^9)(1≤N≤2∗106,1≤M≤109)


思路:

此题应考虑从每个质数进行着手,将题目化简成能够按每个质数计算贡献的方式来进行求解。

先将 NNN 质因数分解,再将 x∈S(N,M)x\in S(N,M)x∈S(N,M) 质因数分解,x=∏i=1mqibix=\prod_{i=1}^{m}q_i^{b_i}x=∏i=1m​qibi​​,约数个数为质因数分解后各指数+1+1+1的连乘。
∏i=1m(bi+1)=N=∏i=1∞piai\prod_{i=1}^{m}(b_i+1)=N=\prod_{i=1}^{\infty}p_i^{a_i} i=1∏m​(bi​+1)=N=i=1∏∞​piai​​
令 bi+1=cib_i+1=c_ibi​+1=ci​,再将 cic_ici​ 质因数分解。
∏i=1m∏j=1∞kjcj=∏i=1m(bi+1)=N=∏i=1∞piai\prod_{i=1}^{m}\prod_{j=1}^{\infty}k_j^{c_j}=\prod_{i=1}^{m}(b_i+1)=N=\prod_{i=1}^{\infty}p_i^{a_i} i=1∏m​j=1∏∞​kjcj​​=i=1∏m​(bi​+1)=N=i=1∏∞​piai​​
将两个连乘积符号交换位置,即可变成对每一个质数求贡献的问题,再将相同质数的指数加在一起。
∏i=1m∏j=1∞kjcj=∏j=1∞∏i=1mkjcj=∏j=1∞kj∑i=1mcij=N=∏i=1∞piai\prod_{i=1}^{m}\prod_{j=1}^{\infty}k_j^{c_j}=\prod_{j=1}^{\infty}\prod_{i=1}^{m}k_j^{c_j}=\prod_{j=1}^{\infty}k_j^{\sum_{i=1}^{m}c_{ij}}=N=\prod_{i=1}^{\infty}p_i^{a_i} i=1∏m​j=1∏∞​kjcj​​=j=1∏∞​i=1∏m​kjcj​​=j=1∏∞​kj∑i=1m​cij​​=N=i=1∏∞​piai​​
由此就可以发现此处只需要将 NNN 唯一分解之后得到的 aia_iai​ 分成 mmm 份,允许 000 的出现即可。


总结:

赛场上没有做出来,主要是考虑的方向发生了错误,没有想到对于单个素数单独求贡献,而是一直将所有素数放到一起考虑,导致问题变得无处下手。

之后的数学问题,如果涉及到了素数,要想到对于每个素数单独求取贡献,而不是对于整理进行直接考虑。


代码:

#include <bits/stdc++.h>
#define __ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define rep(i,a,b) for(int i = a; i <= b; i++)
#define LOG1(x1,x2) cout << x1 << ": " << x2 << endl;
#define LOG2(x1,x2,y1,y2) cout << x1 << ": " << x2 << " , " << y1 << ": " << y2 << endl;
#define LOG3(x1,x2,y1,y2,z1,z2) cout << x1 << ": " << x2 << " , " << y1 << ": " << y2 << " , " << z1 << ": " << z2 << endl;
typedef long long ll;
typedef double db;
const int N = 2*1e6+100;
const int M = 1e5+100;
const db EPS = 1e-9;
const ll mod = 1e9+7;
using namespace std;int c[N][2],prime[N],tot,v[N],tc;
ll n,m;//快速幂
ll poww(ll a,ll b){ll base = a, ans = 1ll;while(b){if(b&1) ans = (ans*base)%mod;base = (base*base)%mod;b >>= 1;}return ans;
}//线性筛
void primes(int x){tot = 0;memset(v,0,sizeof v);rep(i,2,x){if(!v[i]){v[i] = i, prime[++tot] = i;}rep(j,1,tot){if(prime[j] * i > x) break;v[i*prime[j]] = prime[j];if(i % prime[j] == 0) break;}}
}//唯一分解
void getFactors(ll x){ll tmp = x; tc = 0;for(ll i = 1; prime[i]*prime[i] <= tmp; i++){if(tmp%prime[i] == 0){c[++tc][0] = prime[i]; c[tc][1] = 0;while(tmp%prime[i] == 0){tmp /= prime[i];c[tc][1]++;}}}if(tmp != 1){c[++tc][0] = tmp;c[tc][1] = 1;}
}//费马小定理 a^(p-2) 为逆元
ll comp(ll base,ll x){ //C(base,x)ll ans1 = 1, ans2 = 1;for(ll i = base; i >= base-x+1ll; i--) ans1 = (ans1*i)%mod;for(ll i = 1ll; i <= x; i++) ans2 = (ans2*i)%mod;ll tp = (ans1*poww(ans2,mod-2ll))%mod;return tp;
}int main()
{primes(2*(int)1e6);int _; scanf("%d",&_);while(_--){scanf("%lld%lld",&n,&m);getFactors(n);ll ans = 1;rep(i,1,tc){ll tp = comp(c[i][1]+m-1ll,min(m-1ll,(ll)c[i][1]));ans = (ans*tp)%mod;}printf("%lld\n",ans);}return 0;
}

【GYM-100889 D】Dicy Numbers【数学推导求解】相关推荐

  1. P3P相机姿态估计数学推导,求解及自定义实现

    P3P相机姿态估计数学推导,求解及自定义实现 微信公众号:幼儿园的学霸 目录 文章目录 P3P相机姿态估计数学推导,求解及自定义实现 目录 前言 相机到空间点距离求解 角度θ的计算 相机坐标系下的坐标 ...

  2. Poj 1338 Ugly Numbers(数学推导)

    一.题目大意 本题要求写出前1500个仅能被2,3,5整除的数. 二.题解 最初的想法是从1开始检验该数是否只能被2,3,5整除,方法是这样的,对于一个数,如果它能被2整除,就除以2,如果它能被3整除 ...

  3. 数学推导+纯Python实现机器学习算法:GBDT

    Datawhale推荐 作者:louwill,Machine Learning Lab 时隔大半年,机器学习算法推导系列终于有时间继续更新了.在之前的14讲中,笔者将监督模型中主要的单模型算法基本都过 ...

  4. 机器学习——线性回归数学推导

    文章目录 线性回归数学推导 基础知识 线性回归的计算 利用矩阵知识对线性公式进行整合 误差项的分析 似然函数的理解 矩阵求偏导 线性回归的最终求解 实验 1 二维直线实验 2 三维平面实验 3 利用最 ...

  5. 【机器学习基础】数学推导+纯Python实现机器学习算法30:系列总结与感悟

    Python机器学习算法实现 Author:louwill Machine Learning Lab 终于到了最后的总结.从第一篇线性回归的文章开始到现在,已经接近有两年的时间了.当然,也不是纯写这3 ...

  6. 【机器学习基础】数学推导+纯Python实现机器学习算法24:HMM隐马尔可夫模型

    Python机器学习算法实现 Author:louwill Machine Learning Lab HMM(Hidden Markov Model)也就是隐马尔可夫模型,是一种由隐藏的马尔可夫链随机 ...

  7. 【机器学习基础】数学推导+纯Python实现机器学习算法28:CRF条件随机场

    Python机器学习算法实现 Author:louwill Machine Learning Lab 本文我们来看一下条件随机场(Conditional Random Field,CRF)模型.作为概 ...

  8. 【机器学习基础】数学推导+纯Python实现机器学习算法27:EM算法

    Python机器学习算法实现 Author:louwill Machine Learning Lab 从本篇开始,整个机器学习系列还剩下最后三篇涉及导概率模型的文章,分别是EM算法.CRF条件随机场和 ...

  9. 【机器学习基础】数学推导+纯Python实现机器学习算法24:LightGBM

    Python机器学习算法实现 Author:louwill Machine Learning Lab 第17讲我们谈到了竞赛大杀器XGBoost,本篇我们来看一种比XGBoost还要犀利的Boosti ...

  10. 【机器学习基础】数学推导+纯Python实现机器学习算法23:kmeans聚类

    Python机器学习算法实现 Author:louwill Machine Learning Lab 聚类分析(Cluster Analysis)是一类经典的无监督学习算法.在给定样本的情况下,聚类分 ...

最新文章

  1. 从零开始单排学设计模式「UML类图」定级赛
  2. Storm【配置项】 - 详细解释
  3. vc++ 6.0对话框上无法显示中文(乱码)
  4. 精通CSS+DIV基础总结(三)
  5. Android系统语言默认设置为简体中文
  6. 分布式系统之通信技术学习
  7. 软件业的作业示意流程图
  8. windows重绘机制原理
  9. ssm(Spring+Spring mvc+mybatis)Service层实现类——DeptServiceImpl
  10. [HNOI 2001]求正整数
  11. 【MySQL】MySQL的帮助文档
  12. wireshark https_测开日常积累-wireshark应用
  13. 2021-2025年中国电子风扇速度控制器行业市场供需与战略研究报告
  14. VueTreeselect出现unknown解决方法
  15. ProtoBuf与JSON
  16. TMS320C55x之C/C++语言程序设计
  17. Rejected: destination has a full message queue
  18. matlab按图像边缘抠图_Adobe Photoshop入门教程:零基础学会PS抠图拼贴
  19. go每日新闻--2021-01-10
  20. Swing学习01:Swing是什么

热门文章

  1. 简述MAC地址与IP地址的关系
  2. JavaScript 学习笔记一 (入门篇)
  3. C#Excel上传批量导入sqlserver
  4. 基于jquery的全局ajax函数处理session过期后的ajax操作
  5. .Net Framework 总结
  6. phpMyAdmin创建数据库无权限解决方案
  7. (凭什么断点要放入堆栈?)微机学习:第八课
  8. python的for循环语句range_Python入门第7课,循环结构学习,for语句range函数的3种用法...
  9. JMETER安装中遇到的问题(not able to find Java executable or version.Please check your java installation)
  10. HDU 2545 树上战争(并查集)