4772: 显而易见的数论

Time Limit: 40 Sec  Memory Limit: 256 MB
Submit: 76  Solved: 32
[Submit][Status][Discuss]

Description

Input

Output

Sample Input

input 1
1
3 3
0 1 2

input 2
2
5 4
4 1 5 2

input 3
3
7 5
12 11 45 6 2

Sample Output

output 1

4

output 2
31

output 3
7346

HINT

Source

[Submit][Status][Discuss]

预处理即$O(1)$求$F$显然不是瓶颈,关键是g和最终答案的求法。

比较自然的思路是枚举$p_i$,$p_j$,算出它们的出现次数和贡献,累计结果。

这个分情况讨论,整数划分DP一下就好了。

https://www.cnblogs.com/xiaoxubi/p/6927810.html

然后根据一波迷之推导得出$g$是一个积性函数,这样线性筛预处理即可。

https://blog.csdn.net/v5zsq/article/details/76714310

这样时间复杂度问题方面就解决了,然而这题卡时卡空间,任何一个取模运算较多的操作都有可能超时。

可以看出$p_i\neq p_j$的常数过大,所以用$cnt$数组先统计出$a[i]$一共被累计了几次,最后一起乘起来就好了。

 #include<cstdio>
#include<algorithm>
#define rep(i,l,r) for (int i=l; i<=r; i++)
using namespace std; const int N=,M=,mod=;
int type,n,K,tot,ans,gcd[N][N],f[N][N],sum[N],mul[N][N];
int tmp[M],cnt[M],g[M],pri[M],a[M];
bool jud[M]; void add(int &x,int y){ x+=y; if (x>=mod) x-=mod; } void pre1(){
sum[n]=;
rep(i,,n) rep(j,,n){
if (i== || j==) f[i][j]=;
else if (j==i) f[i][j]=(f[i][j-]+)%mod;
else if (j<i) f[i][j]=(f[i-j][j]+f[i][j-])%mod;
else f[i][j]=f[i][j-];
sum[n-i]=f[i][i];
}
} void pre2(){
g[]=; g[]=;
rep(i,,){
if (!jud[i]) pri[++tot]=tmp[i]=i,g[i]=(*i-)%mod;
for (int j=; j<=tot && i*pri[j]<=M; j++){
jud[i*pri[j]]=;
if (i%pri[j]) tmp[i*pri[j]]=pri[j],g[i*pri[j]]=g[i]*g[pri[j]]%mod;
else{
tmp[i*pri[j]]=tmp[i]*pri[j];
if (tmp[i]!=i) g[i*pri[j]]=1ll*g[i/tmp[i]]*g[tmp[i]*pri[j]]%mod;
else g[i*pri[j]]=(1ll*g[i]*pri[j]+i*pri[j]-i)%mod;
break;
}
}
}
} void pre3(){
rep(i,,n) gcd[i][]=gcd[][i]=gcd[i][i]=i,gcd[][i]=gcd[i][]=;
rep(i,,n) rep(j,,i){
if (!gcd[i][j]) gcd[i][j]=gcd[j][i-j];
gcd[j][i]=gcd[i][j];
}
rep(i,,n){
mul[i][]=;
rep(j,,n) mul[i][j]=1ll*mul[i][j-]*i%K;
}
} int F(int pi,int pj){
if (type==) return %K;
if (type==) return gcd[pi][pj]%K;
if (type==) return (mul[pi][pj]+mul[pj][pi]+(pi^pj))%K;
return ;
} int main(){
freopen("bzoj4772.in","r",stdin);
freopen("bzoj4772.out","w",stdout);
scanf("%d%d%d",&type,&n,&K);
for (int i=; i<K; i++) scanf("%d",&a[i]);
pre1(); pre2(); pre3();
/*
rep(i,1,n) rep(j,i+1,n-i)
for (int muli=1; i*muli<=n-j; muli++)
for (int mulj=1; i*muli+j*mulj<=n; mulj++){
int t=(sum[muli*i+mulj*j]-sum[(muli+1)*i+mulj*j]-sum[muli*i+(mulj+1)*j]+sum[(muli+1)*i+(mulj+1)*j])%mod;
add(cnt[F(i,j)],1ll*muli*mulj*(t+mod)%mod);
}
*/
rep(i,,n) rep(j,i+,n-i)
for (int muli=; i*muli<=n-j; muli++)
for (int mulj=; i*muli+j*mulj<=n; mulj++) add(cnt[F(i,j)],sum[muli*i+mulj*j]);
for (int i=; i<K; i++) add(ans,1ll*g[a[i]]*cnt[i]%mod);
rep(i,,n) for (int muli=; i*muli<=n; muli++)
add(ans,(1ll*g[a[F(i,i)]]*((muli*(muli-)/)%mod))%mod*(sum[muli*i]-sum[(muli+)*i]+mod)%mod);
printf("%d\n",ans);
return ;
}

[BZOJ4772]显而易见的数论(数论)的更多相关文章

  1. bzoj4772 显而易见的数论

    题意:http://www.lydsy.com/JudgeOnline/problem.php?id=4772 sol :这个题卡了我一整天QAQ 出题人简直丧心病狂,卡内存+卡常数QAQ 题意就是, ...

  2. 洛谷$P5330\ [SNOI2019]$数论 数论

    正解:数论 解题报告: 传送门$QwQ$ ,,,这题还蛮妙的$QwQ$(,,,其实所有数论题对我来说都挺妙的$kk$然后我真的好呆昂我理解了好久$QAQ$ 考虑先建$Q$个点,编号为$[0,Q)$,表 ...

  3. NOIP复习之1 数学数论

    noip一轮复习真的要开始啦!!! 大概顺序是这样的 1.数学 2.搜索贪心 3.数据结构 4.图论 5.dp 6.其他 数学 1.数论 数论被称为数学皇冠上的明珠,他的重要性主要在于它是其他学习的祖 ...

  4. PKUSC2018训练日程(4.18~5.30)

    (总计:共66题) 4.18~4.25:19题 4.26~5.2:17题 5.3~5.9: 6题 5.10~5.16: 6题 5.17~5.23: 9题 5.24~5.30: 9题 4.18 [BZO ...

  5. 写在SDOI2016Round1前的To Do List

    理性的整理了一下自己的不足. 计算几何啥都不会,字符串类DP毫无练习,数据结构写的不熟,数论推不出式子,网络流建模常建残: 需要达成的任务: 一.网络流: 熟练网络流的板子(之前一直仰慕zkw费用流, ...

  6. 夏令营讲课内容整理 Day 6 Part 2.

    Day 6的第二部分,数论 数论是纯粹数学的分支之一,主要研究整数的性质   1.一些符号: a mod b 代表a除以b得到的余数 a|b a是b的约数 floor(x) 代表x的下取整,即小于等于 ...

  7. LOJ #6303. 水题 (约数 质因数)

    #6303. 水题 内存限制 10 MiB 时间限制:1000 ms 标准输入输出 题目描述 给定正整数 n,kn, kn,k,已知非负整数 xxx 满足 n!modkx=0,求 xmaxx_{max ...

  8. 清明 DAY2

    数论 数论是研究整数性质的东西 也就是 lim   π(x)=x/ ln x (x->无穷) 证明: ∵ p|ab ∴ ab有因子p 设 a=p1k1p2k2......prkr      b= ...

  9. 【洛谷p1403 】【AHOI2005】约数研究

    (有种失踪人口回归的感觉) 约束研究[传送门] (不过好像没有人注意到我这个蒟蒻) 好的不管它啦 最近学数论比较多,所以可能会有好多好多的数论题???(不存在的) 行吧上算法标签: 数论   数论  ...

随机推荐

  1. Jsp上传组件Smartupload介绍

    <form action="UploadServlet" enctype="multipart/form-data" method="post& ...

  2. http缓存知多少

    很久没有写博客了,趁现在也快过年,最近项目不是很忙,写一篇博客做为2018年的开始,重拾刚毕业的几年前写博客的冲动.http协议是每个程序猿应该需要知道的东西,不管是前端人员还是后端人员,以前在上家公 ...

  3. 从零开始学习MXnet(四)计算图和粗细粒度以及自动求导

    这篇其实跟使用MXnet的关系不大,但对于我们理解深度学习的框架设计还是很有帮助的. 首先还是对promgramming models的一个简单介绍,这个东西实际上是在编译里面经常出现的东西,我们在编 ...

  4. poj 1523 割点 tarjan

    Description Consider the two networks shown below. Assuming that data moves around these networks on ...

  5. jquery、zepto冲突

    <script type="text/javascript" src="js/jquery.min.js"></script> < ...

  6. 关于GitHub学习的地方,很明了

    地址: http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

  7. Maven环境搭建、调试、打包

    1.配置Maven环境 将下载文件解压,然后设置maven环境 新建环境变量M2_HOME 变量名:M2_HOME 变量值:F:\maven\apache-maven-3.0.3 追加path环境变量 ...

  8. vivo面试学习3(git和svn的区别)

    git和svn有什么区别? svn: 系统特点: 1).集中式版本控制系统(存在一个中央版本库,所有开发人员所使用的代码都是来源于版本库,提交代码也是这个中央版本库) 2).企业内部并行集中开发 3) ...

  9. bzoj 1076 状压DP

    我们设w[i][s]为当前到第i关,手中的物品为s的时候,期望得分为多少,其中s为二进制表示每种物品是否存在. 那么就比较容易转移了w[i][s]=(w[i-1][s']+v[j]) *(1/k),其 ...

  10. javascript的阻塞机制

    javascript的阻塞机制 浏览器在执行javascript代码时,不能同时做其它事情,当遇到javascript时,浏览器会下载js文件,解析并执行该文件,而在这期间页面的渲染是完全被阻塞的,因 ...