BZOJ 3930: [CQOI2015]选数 莫比乌斯反演
2024-10-16 01:52:46
https://www.lydsy.com/JudgeOnline/problem.php?id=3930
https://blog.csdn.net/ws_yzy/article/details/50966171
求从区间[L,H]中可重复的选出n个数使其gcd=k的方案数
就是,莫比乌斯反演,我抄的代码所以没有提前求莫比乌斯函数。
自乘的倍数个方案要去掉。现在想想我最后自己想出来的代码好像是没问题的但是我忘了加上唯一的一个自乘特判情况了,wa了太多次最后没忍住读(抄)了一份ac代码,还是意志不够坚定也不够细心。
emmmm现在发现似乎好久没有写博客了呢。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
#define LL long long
const LL maxn=;
const LL p=(int)1e9+;
LL n,k,l,r;
LL ans[maxn]={};
LL mpow(LL x,LL y){
LL z=;
while(y){
if(y&)z=(z*x)%p;
x=(x*x)%p;
y>>=;
}
return z;
}
int main(){
scanf("%lld%lld%lld%lld",&n,&k,&l,&r);
LL a=r/k,b=l/k;if(l%k)++b;
for(LL i=r-l;i>=;--i){
LL ww=a/i-b/i; if(b%i==)++ww;
if(ww<=)continue;
ans[i]=(mpow(ww,n)-(ww%p)+p)%p;
for(int j=*i;j<=r-l;j+=i)ans[i]=(ans[i]-ans[j]+p)%p;
}
if(b==)ans[]=(ans[]+)%p;
printf("%lld\n",ans[]);
return ;
}
最新文章
- java学习笔记之IO一()
- SqlServer切换MySql总结
- angularjs的三目运算
- 结合C++和GDAL实现shapefile(shp)文件的创建和写入
- LeetCode 334 Increasing Triplet
- 列车时刻表查询 jqm/ajax/xml
- PHP设计模式之:策略模式
- DOS命令行使用pscp实现远程文件和文件夹传输(转)
- GroupLayout 布局
- struts2中的国际化
- POJ2676 Sudoku [数独]
- [WPF]静态资源(StaticResource)和动态资源(DynamicResource)
- [Bullet3]常见物体和初始化
- ZJOI2017 Round#2 滚粗记
- css阴影,边框,渐变,背景
- nova创建虚拟机源码分析系列之五 nova源码分发实现
- pm2部署nodejs项目
- 板载 SPI-FLASH 的烧写方法
- Mongodb副本集+分片集群环境部署记录
- 去掉easyui datagrid内部虚线的方式。