BZOJ4635 : 数论小测验
第一问:
设$a[i]$表示使用$[1,i]$的数字$n$次形成的数组里有多少个$\gcd=1$。
考虑容斥,则$a[i]=i^n-\sum_{j=2}^i a[\lfloor\frac{i}{j}\rfloor]$,可以分$\sqrt{i}$段算出。
$ans=\sum_{i=l}^r a[\lfloor\frac{m}{i}\rfloor]$,也可以分$\sqrt{m}$段算出。
注意到只有$\sqrt{m}$个$a[i]$被使用到,所以只计算它们即可。
时间复杂度$O(m)$。
第二问:
设$s[i][j]$表示$1$到$j$里有多少数字与$i$互质,可以通过$O(m^2)$的预处理求出。
对于一个询问,枚举所有$k$,计算$k|lcm$的答案。
将$k$分解质因数,则使用的$n$个数字相应质因子的指数不能比它小。
考虑容斥,转化成求有多少数字对应指数都比它小。
设$k$的质因子乘积为$mul$,则方案数为$(\sum_{d|\frac{k}{mul}}s[mul][\lfloor\frac{m}{d}\rfloor])^n$。
时间复杂度$O(m\log m)$。
#include<cstdio>
const int N=1001,M=7100,P=1000000007;
int T,type,t,n,m,l,r,i,j;
int f[N][N],s[N][N],G[N],V[M],NXT[M],mul[N],g[N],v[M],nxt[M],ed;
int p[N],a[10000001],b[N],ans;
inline void up(int&a,int b){a+=b;while(a>=P)a-=P;}
inline int pow(int a,int b){int t=1;for(;b;b>>=1,a=1LL*a*a%P)if(b&1)t=1LL*t*a%P;return t;}
inline void init(int x,int n){
int t=0,i,j;
for(i=2;i<=x;i=j+1)j=x/(x/i),up(t,1LL*(j-i+1)*a[x/i]%P);
a[x]=(pow(x,n)+P-t)%P;
}
void dfs(int x,int y,int z){
if(x==t){
if(z==1)return;
mul[y>0?y:-y]=z;
v[++ed]=y;nxt[ed]=g[i];g[i]=ed;
return;
}
dfs(x+1,y,z),dfs(x+1,-y*a[x],z*b[x]);
}
inline void cal(int x){
up(ans,p[m]);
for(int i=g[x];i;i=nxt[i]){
if(v[i]>0)up(ans,p[a[v[i]]]);
else up(ans,P-p[a[-v[i]]]);
}
}
int main(){
scanf("%d%d",&T,&type);
if(type==1){
a[1]=1;
while(T--){
scanf("%d%d%d%d",&n,&m,&l,&r);ans=0;
for(i=1;i<=m;i=m/(m/i)+1)v[++t]=m/i;
while(t)init(v[t--],n);
for(i=l;i<=r;i=j+1){
j=m/(m/i);
if(j>r)j=r;
up(ans,1LL*(j-i+1)*a[m/i]%P);
}
printf("%d\n",ans);
}
}else{
for(i=0;i<N;i++)f[0][i]=f[i][0]=f[i][i]=i;
for(i=2;i<N;i++)for(j=1;j<i;j++)f[i][j]=f[j][i]=f[i-j][j];
for(i=1;i<N;i++)for(j=1;j<N;j++)s[i][j]=s[i][j-1]+(f[i][j]==1);
for(i=1;i<N;i++)for(j=i;j<N;j+=i)V[++ed]=i,NXT[ed]=G[j],G[j]=ed;
for(ed=0,i=2;i<N;i++){
for(n=i,t=0,j=2;j<=n;j++)if(n%j==0){
for(m=1;n%j==0;n/=j,m*=j);
a[t]=m,b[t++]=j;
}
dfs(0,1,1);
}
while(T--){
scanf("%d%d%d%d",&n,&m,&l,&r);ans=0;
for(i=1;i<=m;i++)p[i]=pow(i,n);
for(i=2;i<=m;i++)for(a[i]=0,j=G[i/mul[i]];j;j=NXT[j])a[i]+=s[i][m/V[j]];
while(l<=r)cal(l++);
printf("%d\n",ans);
}
}
return 0;
}
BZOJ4635 : 数论小测验的更多相关文章
- 来试试这个来自静态代码分析工具PVS Studio提供C++的小测验吧
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:来试试这个来自静态代码分析工具PVS Studio提供C++的小测验吧.
- Java web 小测验
题目要求: 1登录账号:要求由6到12位字母.数字.下划线组成,只有字母可以开头:(1分) 2登录密码:要求显示“• ”或“*”表示输入位数,密码要求八位以上字母.数字组成.(1分) 3性别:要求用单 ...
- codeforces 615 D. Multipliers (数论 + 小费马定理 + 素数)
题目链接: codeforces 615 D. Multipliers 题目描述: 给出n个素数,这n个素数的乘积等于s,问p的所有因子相乘等于多少? 解题思路: 需要求出每一个素数的贡献值,设定在这 ...
- noip考前抱佛脚 数论小总结
exCRT 求解韩信点兵问题,常见的就是合并不同\(mod\). 先mo一发高神的板子 for(R i=2;i<=n;++i){ ll Y1,Yi,lcm=Lcm(p[i],p[1]); exg ...
- oracle12c数据库第一周小测验
一.单选题(共4题,30.4分) 1 ( )是位于用户与操作系统之间的一层数据管理软件.数据库在建立.使用和维护时由其统一管理.统一控制. A. A.DBMS B. B.DB C. C.DBS ...
- [译] Block 小测验
本文来源于 ParseBlog 的其中一篇博文 <Objective-C Blocks Quiz> 如果您觉得我的博客对您有帮助,请通过关注我的新浪微博 MicroCai 支持我,谢谢! ...
- JS小测验
1.编写一个方法method(),判断一个数能否同时被3和5整除 <div class="one" onClick="method()"> func ...
- jQuery小测验
1.在div元素中,包含了一个<span>元素,通过has选择器获取<div>元素中的<span>元素的语法是? 提示使用has() $(div:has(span) ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
随机推荐
- 浅析 - Storyboard / Xib
大家都知道纯代码写应用的成本是很高的,特别是涉及到UI界面的实现,相当耗费时间.之前自己写应用时有了解过Storyboard,也简单使用过,但随着最近深入了解它之后,发现自己低估了它的作用和影响力,因 ...
- hdu 1860统计字符
本来是想用map写的,但是map里面会自动按字典序升序排序导致wa了一把,供 #include<time.h> #include <cstdio> #include <i ...
- mysql的事务处理
事务用于保证数据的一致性,它由一组相关的DML语句组成,该组的DML语句要么全部成功,要么全部失败. 示例: 银行账单 $mysqli=new mysqli("localhost" ...
- 使用drozer连接时提示:Could not find java. Please ensure that it is installed and on your path
在安装drozer后使用 drozer.bat console connect命令提示如下错误(实际上我已经安装了jdk并添加了path) 参考上面的链接已经它的提示解决方法如下: 建立名为 .dro ...
- CLR via C#(02)-基元类型、引用类型、值类型
http://www.cnblogs.com/qq0827/p/3281150.html 一. 基元类型 编译器能够直接支持的数据类型叫做基元类型.例如int, string等.基元类型和.NET框架 ...
- jQuery - 9.Ajax
9.1 Ajax 的 XMLHttpRequest 对象 9.2 JQuery中的Ajax 9.2.1 load()方法 9.2.2 $.get() 9.2.3 $.post() 9.2.4 $.ge ...
- Delphi面向对象的方法
方法是属于一个给定对象的过程和函数,方法反映的是对象的行为而不是数据,前一篇提到的对象的两个重要的方法:构造方法和析构方法. 为了使对象能执行各种功能,你能在对象中定制方法 创建一个方法用两个步骤,首 ...
- ExcelReport第一篇:使用ExcelReport导出Excel
导航 目 录:基于NPOI的报表引擎——ExcelReport 下一篇:ExcelReport源码解析 概述 本篇将通过导出学生成绩的示例演示“使用ExcelReport导出Excel”的步骤. ...
- 【PHP Cookie&&Session】
大部分的人都知道Cookie,但是可能不了解Session,现在对这两者进行解释. 问题的提出: 有些网站会提示用户在一定的时间之内免登陆,这是用的什么技术?答案是Cookie技术. 有些购物网站会提 ...
- 攻城狮在路上(叁)Linux(二十八)--- 打包命令:tar
首先介绍一下tar打包命令的基本格式,下面的三种之间不能混淆. tar [-j|-z] [cv] [-f 新文件名] file1 file2 ...; tar [-j|-z] [tv] [-f 新文件 ...