传送门

终于A了……细节真多……

首先我们发现这是个连乘,而且\(\phi\)是个积性函数,所以我们可以考虑不同的质因子以及它的不同次数的贡献。简单来说就是把每一次的\(\phi(lcm(i_1,i_2,...))\)拆成一堆\(\phi(p^c)\)的乘积

如果枚举到的\(k\)个数里质因子\(p\)的最大次数为\(c\),那么最终的答案就要乘上一个\(\phi(p^c)\)。所以我们的目的就是要求出这\(k\)个数里\(p\)的最大次数为\(c\)时的方案数\(t\),然后这部分对答案的贡献就是\(\phi(p^c)^t\)

计算方案的部分可以用容斥解决。设\(d_p(i)\)表示质因子\(p\)的最高次数为\(i\)的总方案数,\(s_p(i)\)表示质因子\(p\)的最高次数不超过\(i\)的总方案数,那么\(d_p(i)=s_p(i)-\sum_{j=1}^{i-1}d_p(j)\),边界条件为\(d_p(0)=s_p(0)\),前缀和优化一下就能快速计算了

最后是\(s_p(i)\)怎么计算。我们可以单独考虑每一位的方案数最后\(k\)位乘起来就好了。先考虑质因子\(p\)的最高次数刚好为\(i\)的情况,对于某一位来说,能选的数\(j\)要满足\(j\times p^i\leq n\)且\(j\)不包含\(p\)这个质因子,那么满足条件的\(j\)的次数就是\(\left\lfloor\frac{n}{p^i}\right\rfloor-\left\lfloor\frac{n}{p^{i+1}}\right\rfloor\),于是前缀和一下就能得到对一个数来说的方案数为\(n-\left\lfloor\frac{n}{p^i}\right\rfloor\),那么\(s_p(i)=(n-\left\lfloor\frac{n}{p^i}\right\rfloor)^k\)

然后注意一个细节,因为上面\(s_p\)和\(d_p\)的计算基本都是要炸精度所以要取模,然而因为这两个东西是作为次数出现的,所以根据欧拉定理取模的时候要模\(\phi(P)\)而不是\(P\),因为这个东西调死掉……

然后就没有然后了

//minamoto
#include<bits/stdc++.h>
#define R register
#define ll long long
#define inf 0x3f3f3f3f
#define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i)
#define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
using namespace std;
const int N=2e6+5,P=1e9+7,Phi=P-1;
int p[N],vis[N],phi[N],kkk[N];bool flag=0;
int n,k,m,ans;ll sum,t;
inline int add(R int x,R int y,R int P){return x+y>=P?x+y-P:x+y;}
inline int dec(R int x,R int y,R int P){return x-y<0?x-y+P:x-y;}
inline int ksm(R int x,R int y,R int P){
int res=1;
for(;y;y>>=1,x=1ll*x*x%P)if(y&1)res=1ll*res*x%P;
return res;
}
void init(int n){
phi[1]=kkk[1]=1;
fp(i,2,n){
if(!vis[i])p[++m]=i,phi[i]=i-1,kkk[i]=ksm(i,k,Phi);
//预处理一下phi和所有数的k次幂
for(R int j=1;j<=m&&1ll*i*p[j]<=n;++j){
vis[i*p[j]]=1,kkk[i*p[j]]=1ll*kkk[i]*kkk[p[j]]%Phi;
if(i%p[j]==0){phi[i*p[j]]=phi[i]*p[j];break;}
phi[i*p[j]]=phi[i]*(p[j]-1);
}
}
}
void solve(int p){
sum=kkk[n-n/p];
for(R int i=p;i<=n;(1ll*i*p<=n?i*=p:i=inf)){
t=dec(kkk[n-n/(1ll*i*p)],sum,Phi);
ans=1ll*ans*ksm(phi[i],t+Phi,P)%P,
sum=add(sum,t,Phi);
}
}
int main(){
// freopen("testdata.in","r",stdin);
scanf("%d%d",&n,&k),ans=1,init(n);if(n==1)return puts("1"),0;
fp(i,1,m)solve(p[i]);return printf("%d\n",ans),0;
}

P5106 dkw的lcm的更多相关文章

  1. [洛谷P5106]dkw的lcm:欧拉函数+容斥原理+扩展欧拉定理

    分析 考虑使用欧拉函数的计算公式化简原式,因为有: \[lcm(i_1,i_2,...,i_k)=p_1^{q_{1\ max}} \times p_2^{q_{2\ max}} \times ... ...

  2. [Luogu5106]dkw的lcm

    https://minamoto.blog.luogu.org/solution-p5106 容易想到枚举质因子及其次数计算其贡献,容斥计算$\varphi(p^i)$的次方数. #include&l ...

  3. LCM性质 + 组合数 - HDU 5407 CRB and Candies

    CRB and Candies Problem's Link Mean: 给定一个数n,求LCM(C(n,0),C(n,1),C(n,2)...C(n,n))的值,(n<=1e6). analy ...

  4. CodeBlocks及LCM应用

    以下是在开发过程中遇到的一些细节点: 1)called after throwing an instance of std::bad_alloc 此问题是由于publish(data),当中data赋 ...

  5. LCM 轻量级通信组件

    LCM和ZMQ比较 http://www.doc88.com/p-6711552253536.html 基于LCM和ZeroMQ的进程间通信研究 2.简介 LCM(Lightweight Commuc ...

  6. uva12546. LCM Pair Sum

    uva12546. LCM Pair Sum One of your friends desperately needs your help. He is working with a secret ...

  7. UVA 10791 Minimum Sum LCM(分解质因数)

    最大公倍数的最小和 题意: 给一个数字n,范围在[1,2^23-1],这个n是一系列数字的最小公倍数,这一系列数字的个数至少为2 那么找出一个序列,使他们的和最小. 分析: 一系列数字a1,a2,a3 ...

  8. LCM在Kernel中的代码分析

    lcm的分析首先是mtkfb.c 1.mtk_init中platform_driver_register(&mtkfb_driver)注册平台驱动 panelmaster_init(); DB ...

  9. Pairs Forming LCM(素因子分解)

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=109329#problem/B    全题在文末. 题意:在a,b中(a,b<=n) ...

随机推荐

  1. HDU 5360 【优先队列+贪心】

    题意: 给定N个无序区间. 对合法区间的定义是: 在这个区间之前已经选出了至少l个合法区间,最多选出了r个合法区间.则该区间为合法区间. 输出最多能挑选出多少个合法区间,并输出合法区间的数量. 思路: ...

  2. java课堂测试—根据模板完成一个简单的技术需求征集系统

    课堂上老师发布了一个页面模板要求让我们实现一个系统的功能,模仿以后后端的简单工作情况. 然后在这个模板的基础上,提供了一个注册的网页模板,接着点击注册的按钮,发现register里面调用了zhu/zh ...

  3. ARM PPC 交叉编译环境搭建

    ARM: 1,下载cross-3.4.1.tar.bz2 2,在/usr/local目录下建立arm目录 3,将cross-3.4.1.tar.bz2拷贝到arm目录下 4,tar jxvf cros ...

  4. 基于gulp编写的一个简单实用的前端开发环境

    自从Node.js出现以来,基于其的前端开发的工具框架也越来越多了,从Grunt到Gulp再到现在很火的WebPack,所有的这些新的东西的出现都极大的解放了我们在前端领域的开发,作为一个在前端领域里 ...

  5. 集群FULL GC导致服务不可用

    FULL GC会导致stop-the-world,频繁的FULL GC会影响系统的可用性.stackoverflow上有个提问是这么描述这个问题的:当服务器集群批量启动后,执行FULL GC的频率和时 ...

  6. 一个重绘MFC的文件传输client

     一个重绘MFC的文件传输client,TCP/IP协议的文件传输client(支持上传.下载.续传.管理等功能,本处仅仅选择了上传功能).从用户视觉上看,肯定比原生MFC界面要有感觉,啥也不说了 ...

  7. 开源yYmVc项目,邀您和我一起开发:)

    打算在闲暇时间写个MVC框架,要有什么功能一步一步边写边加,仿照struts 2 和 spring mvc.假设您感兴趣的话,能够私密我,给您加入key:). 欢迎您的到来~ 项目放在基于GIT的CS ...

  8. ubuntu下安装pycharm的方法

    linux下安装pycharm是比较麻烦的. 安装pycharm之前要安装好JDK8,依次执行如下的命令: sudo add-apt-repository ppa:webupd8team/java s ...

  9. CSS 相对|绝对(relative/absolute)定位系列(一)

    一.有话要说 以前写内容基本上都是:眼睛一亮——哟呵,这个不错,写!然后去古人所说的茅房里蹲会儿,就有写作的思路了.但是,构思相对/绝对(relative/absolute)定位系列却有好些时日,考虑 ...

  10. IDEA失效的解决办法

    1.根据下图进行操作即可解决