好神仙啊....


题意

在$ [0,n) $中选$ k$个不同的数使和为$ n$的倍数

求方案数

$ n \leq 10^9, \ k \leq 10^3$


题解

k可以放大到1e6的

先不考虑$ k$的限制

对答案构建多项式$ f(x)=\prod\limits_{i=0}^{n-1}(x^i+1)$

答案就是这个多项式所有次数为$ n$的倍数的项的系数和

考虑单位根反演

$$ans=\frac{1}{n}\sum_{i=0}^{n-1}\prod_{j=0}^{n-1}(w_n^{ij}+1)$$

设$ d=\gcd(n,i),t=\frac{n}{d}$

$$ans=\frac{1}{n}\sum_{d|n}\sum_{i=0}^{t-1}(\prod_{j=0}^{t-1}(w_t^{ij}+1))^d[\gcd(t,i)=1]$$

由于$\gcd(t,i)=1$,可以去掉单位根指数上的$ i$

$$ans=\frac{1}{n}\sum_{d|n}\sum_{i=0}^{t-1}(\prod_{j=0}^{t-1}(w_t^{j}+1))^d[\gcd(t,i)=1]$$

考虑$ \prod\limits_{j=0}^{t-1}(w_t^{j}+1)$是什么

根据定义可知$ w_t^{0..t-1}$是$ x^t-1=0$的$ n$个根

因此有$ x^t-1=\prod\limits_{i=0}^{t-1}(x-w_t^i)$

讨论$ n$的奇偶性可得$ \prod\limits_{j=0}^{t-1}(w_t^{j}+1)=1-(-1)^t$

再用欧拉函数进行化简得$$ans=\frac{1}{n}\sum_{d|n}\phi(t)(1-(-1)^t)^d$$

然后考虑有$ k$这个限制怎么做

我们再添加一个新变量$ y$,以$ y$为主元构建多项式$ f(y)=\prod\limits_{i=0}^{n-1}(yx^i+1)$

我们要求的就是这个多项式$ y^k$的系数

用跟上面相同的方法可以化简得最后的答案多项式为$$ans=\frac{1}{n}\sum_{d|n}\phi(t)(1-(-y)^t)^d$$

由于只需要知道$y^k$的系数,直接展开就好了

跑的飞快


代码

#include<ctime>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#define p 1000000007
#define rt register int
#define ll long long
using namespace std;
inline ll read(){ll x=0;char zf=1;char ch=getchar();while(ch!='-'&&!isdigit(ch))ch=getchar();if(ch=='-')zf=-1,ch=getchar();while(isdigit(ch))x=x*10+ch-'0',ch=getchar();return x*zf;
}
void write(ll y){if(y<0)putchar('-'),y=-y;if(y>9)write(y/10);putchar(y%10+48);}
void writeln(const ll y){write(y);putchar('\n');}
int k,m,n,x,y,z,cnt,ans;
int phi[1010],ss[1010];bool pri[1010];
int njc[1010],inv[1010];
int ksm(int x,int y=p-2){int ans=1;for(;y;y>>=1,x=1ll*x*x%p)if(y&1)ans=1ll*ans*x%p;return ans;
}
int C(int x,int y){int ans=1;for(rt i=x;i>=x-y+1;i--)ans=1ll*ans*i%p;return 1ll*ans*njc[y]%p;
}
int main(){n=read();k=read();phi[1]=1;for(rt i=0;i<=1;i++)njc[i]=inv[i]=1;for(rt i=2;i<=k;i++){inv[i]=1ll*inv[p%i]*(p-p/i)%p;njc[i]=1ll*njc[i-1]*inv[i]%p;}for(rt i=2;i<=k;i++){if(!pri[i])ss[++cnt]=i,phi[i]=i-1;for(rt j=1;j<=cnt&&i*ss[j]<=k;j++){phi[i*ss[j]]=phi[i]*phi[ss[j]];pri[i*ss[j]]=1;if(i%ss[j]==0){phi[i*ss[j]]=phi[i]*ss[j];break;} }}int ans=0,invn=ksm(n);for(rt d=1;d<=k;d++)if(n%d==0&&k%d==0){const int v=k/d;int tag=1;if((v&1)&&(d&1^1))tag=-tag;(ans+=1ll*tag*phi[d]%p*invn%p*C(n/d,k/d)%p)%=p;}cout<<(ans+p)%p;return 0;
}

转载于:https://www.cnblogs.com/DreamlessDreams/p/10567084.html

BZOJ4314 倍数?倍数!相关推荐

  1. 单价数量和总价的公式_小学六年超全的数学公式!家长们赶紧给孩子看过来……...

    小学数学基础知识整理 (一到六年级) 小学一年级 初步认识加减法.学会基础加减. 小学二年级 完善加减法,表内乘法,学会应用题,基础几何图形. 小学三年级 学会万以内加减法,长度单位和质量单位,倍数的 ...

  2. 米的换算单位和公式_求小学数学的公式、换算和单位转英文字母(米cm)

    共回答了21个问题采纳率:81% 1 每份数×份数=总数 总数÷每份数=份数 总数÷份数=每份数 2 1倍数×倍数=几倍数 几倍数÷1倍数=倍数 几倍数÷倍数=1倍数 3 速度×时间=路程 路程÷速度 ...

  3. 课程设计个人报告——基于ARM实验箱的捕鱼游戏的设计与实现

    课程设计个人报告--基于ARM实验箱的捕鱼游戏的设计与实现 一.个人贡献 参与课设题目讨论及部分过程 资料收集 负责代码调试 捕鱼游戏相应功能的实现 实验环境 Eclipse软件开发环境: ARM实验 ...

  4. bulk这个词的用法_15、形容词与副词(二)比较的用法

    初中英语语法-- 形容词与副词(二) 比较的用法 语法解释 1.形容词与副词比较级和最高级的规则变化 单音节词与部分双音节词: (1)一般情况加-er,-est long-longer-longest ...

  5. 从714里连续减去6减几次得0_数学干货 | 小学数学1—6年级基础知识整理 ,预习复习都能用...

    小学数学基础知识整理 (一到六年级) 小学一年级:初步认识加减法.学会基础加减. 小学二年级:完善加减法,表内乘法,学会应用题,基础几何图形. 小学三年级:学会万以内加减法,长度单位和质量单位,倍数的 ...

  6. 自顶向下 计算机网络知识,计算机网络(自顶向下)第七版考试复习要点(第四章)...

    第四章 网络层概述 转发和路由选择:数据平面和控制平面 传统的控制方法和SDN的控制方法 路由器的工作原理及数据转发原则 网络层作用 路径选择,选择数据报经过的路由器 网络层的路由器中进行存储.交换. ...

  7. 从714里连续减去6减几次得0_小学数学1—6年级基础知识整理 ,预习复习都能用...

    小学数学基础知识整理 (一到六年级)      小学一年级  初步认识加减法.学会基础加减. 小学二年级  完善加减法,表内乘法,学会应用题,基础几何图形.小学三年级  学会万以内加减法,长度单位和质 ...

  8. 鼠标滚轮事件onmouewheel

    鼠标滚轮事件onmouewheel    1. onmouewheel 事件触发条件:当鼠标滚轮向上或者向下滚动时 用法: document.onmousewheel = function() {} ...

  9. 6s英语语法笔记(图片炸了)

    ☢CSDN图片炸了,此处浏览体验更好☢\color{purple}\Huge☢CSDN图片炸了,此处浏览体验更好☢☢CSDN图片炸了,此处浏览体验更好☢ 第一课 名词 [外链图片转存失败,源站可能有防 ...

最新文章

  1. 如何获取FragmentTabHost中指定标签页的Fragment
  2. 游戏开发:OpenGL入门学习
  3. IdentityServer4系列 | 初识基础知识点
  4. 【ZOJ - 3210】A Stack or A Queue? (模拟)
  5. Base64 编解码
  6. 十八般武艺玩转GaussDB(DWS)性能调优:SQL改写
  7. 完了!CPU 一味求快出事儿了!| 原力计划
  8. 数据结构上机实践第14周项目1(3) - 验证算法(二叉排序树)
  9. Python自然语言处理学习笔记(45):5.6 基于转换的标记
  10. hashmap hash冲突怎么解决_让我再撸一次HashMap
  11. xuperchain 事件订阅 判断交易是否上链 交易状态
  12. 系统各层关注的内容【DDDD笔记】
  13. css3实现水平垂直居中
  14. 电信手机手机最快服务器是哪个,移动、电信、联通4G上网速度,哪家速度最快?...
  15. [c语言]malloc动态开辟内存空间
  16. 最新的服务器cpu有国产的吗,浪潮发布国产飞腾CPU服务器 已达业界主流水平
  17. PowerBI动态坐标轴及年季月切换
  18. 在线文本替换工具 、支持正则表达式(博客园文章里添加Javascript或<script>语句)
  19. 华为陈黎芳:已在全球获得50多个5G商业合同
  20. html网页里如何竖着打字,搜狗输入法怎么设置为竖排显示 怎样把横向打字变成竖向...

热门文章

  1. 内存四区(代码区 静态区 栈区 堆区)
  2. php图片视频,PHP中使用php5-ffmpeg撷取视频图片实例
  3. fastq质量值_fastq 数据格式解析
  4. 程序员幽默:年后上班综合症,你中了几招?!!
  5. 计算机网络基础:Internet常用服务介绍​
  6. 最难学编程语言排汗榜
  7. 程序员如何高效的学习?
  8. easyui 一些小技巧
  9. PHP解决http和https跨域,php中http与https跨域共享session的解决方法
  10. Vue 团队公开快如闪电的全新脚手架工具,未来将替代 Vue-CLI,才300余行代码,学它!...