题目链接

HDU - 5970

分析

很显然\(f(x,y)\)与\(f(x+y*k,y)\)的结果相同,因为它们在第一次取模后会变成相同的式子

我们再看一下数据的范围,突破口肯定在\(m\)那里

那么我们就可以从m开始枚举,对于每一个m,我们分别求出模\(m\)等于\(0,1,2......m-1\)的\(f\)值

那么我们就可以把所有模\(m\)的值相同的数放在一起单独处理

对于每一个单独处理的数列,我们不能简单地进行求和处理,因为会涉及到向下取整的操作

其实,我们再推算一下,\(f(i,j)=gcd(i,j)*gcd(i,j)*c\)

而最后的结果是\(\frac{i*j}{f(i,j)}=\frac{i*j}{gcd(i,j)*gcd(i,j)*c}\)

\(i\)和\(j\)肯定能被\(gcd(i,j)\)整除,所以向下取整一定是以\(c\)为周期的

那我们可以再把这一个数列分成\(c\)个等差数列来处理

首项、公差、项数都非常显然,简单推导就可以得到

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,m,mod;
ll my_gcd(int aa,int bb,int &g,int &c){
c=0,g=aa;
int t;
while(bb>0){
c++;
t=aa%bb;
aa=bb;
bb=t;
}
g=aa;
return 1ll*aa*aa*c;
}
void solve(){
ll ans=0;
int g,c;
for(int j=1;j<=m;j++){
for(int i=1;i<=j && i<=n;i++){
ll now=my_gcd(i,j,g,c);
for(int k=0;k<c;k++){
if(i+k*j>n) break;
ll a0=(i+k*j)*j/now;
ll d=c*j*j/now;
ll num=(n-(i+k*j))/(c*j)+1;
ans=((ans+a0*num)%mod+num*(num-1)/2%mod*d%mod)%mod;
}
}
}
printf("%lld\n",ans);
}
int main(){
int t;
scanf("%d",&t);
while(t--){
scanf("%d%d%d",&n,&m,&mod);
solve();
}
return 0;
}

HDU - 5970 题解的更多相关文章

  1. HDU 2023题解分析

    我想说这道题我还没弄明白我错哪了,交了20多遍一直都是Runtime Error,改了N次还是不对,后来搜了一下,说是数组开小了,又把数组开大,还不对,又改发现一个平均值求错,再改,还不对,洗洗睡吧. ...

  2. 2014年北京网络赛 Instrusive HDU 5040 题解 优先队列

    网赛的时候看了这道题,发现就是平常的那种基础搜索题. 由于加了一个特殊条件:可以一次消耗3秒或原地停留1秒. 那就不能使用简单的队列了,需要使用优先队列才行. 题意 告诉一副地图:一个起点,一个终点, ...

  3. hdu 5418 题解

    第一眼看到这题,哇,这不是我刚做完的题吗?大水题!然后 这题表面很水,实际上有点坑. 题意 求经过 $ 1 - n $(不能遗漏) 并且回到 $ 1 $ 的最短路. 在看这题之前我们可以来看下这题 最 ...

  4. HDU 1231 题解

    题面: 最大连续子序列 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem ...

  5. 传递 HDU - 5961 题解

    题目传送门 分析 题目大意:给一个竞赛图,将图分成两部分,判断两部分的图是否符合传递闭包,a->b,b->c,则a->c 这道题用Floyd硬跑的显然n\({^3}\)会T 如果用b ...

  6. HDU 5970 最大公约数

    中文题 题意: 思路: 1.观察可得 模m的同余系和m的gcd都相同(这题多了一个c也是相同的) 2.由于取证所以不能用简单的用O(m^2)的做法,涉及到多1少1的 3.打表观察,例如i为模9为7的数 ...

  7. 2018 Multi-University Training Contest 6-oval-and-rectangle(hdu 6362)-题解

    一.题意 求椭圆内接矩形周长的期望. 二.推导过程 已知$c$,容易得出矩形弦长$d=4a\sqrt{1-\frac{c^2}{b^2}}$ 接下来,矩形周长$p=4c+d=4c+4a\sqrt{1- ...

  8. 2018 Multi-University Training Contest 2-1007(hdu 6315)-题解

    一.题意 给定一个元素个数为$N(1 \le N \le 10^5)$初始序列$a$和$b$,$a$序列的初始值全为$0$,$b$序列的初始值为$1$到$N$的一个排列.有$T(1 \le T \le ...

  9. HDU 5984 题解 数学推导 期望

    Let’s talking about something of eating a pocky. Here is a Decorer Pocky, with colorful decorative s ...

随机推荐

  1. 原生js实现点击添加购物车按钮出现飞行物飞向购物车

    效果演示: 思路:核心->抛物线公式 let a = -((y2-y3)*x1 - (x2-x3)*y1 + x2*y3 - x3*y2) / ((x2-x3) * (x1-x2) * (x1- ...

  2. 「从零单排canal 01」 canal 10分钟入门(基于1.1.4版本)

    1.简介 canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据 订阅 和 消费.应该是阿里云DTS(Data Transfer Servi ...

  3. Tomcat线程模型分析及源码解读

    1 四种线程模型  配置方法:在tomcat conf 下找到server.xml,在<Connector port="8080" protocol="HTTP/1 ...

  4. CentOS7——初始化

    CentOS7--初始化 #禁止关闭显示器 archlinux wiki 提及的方法 echo -ne "\033[9;0]" >> /etc/issue # 重启,c ...

  5. 前端JS的服务订阅&服务发布

    var eventCenter = { sub:function(mesName, mesCallback){ this.argus=this.argus||{}; this.argus[mesNam ...

  6. Nice Jquery Validator 自定义规则

    规则定义方式 (1). 正则 适用于使用单个正则能搞定的验证. // 使用数组包裹正则和错误消息,规则不通过时提示该消息 mobile: [/^1[3458]\d{9}$/, '请检查手机号格式'] ...

  7. 用了一年 TIM 移动版之后,我又换回了手机 QQ

    TIM,是一个很玄学的产品. 讲真,我很不喜欢 QQ 电脑版.一个原因是我很讨厌一直占着右上角这一行为:右上角是给关闭按钮实现盲操用的,QQ 这么一个聊天软件没有这么高的地位:二是我不喜欢它的多窗口: ...

  8. Hive和HBase整合用户指南

    本文讲解的Hive和HBase整合意思是使用Hive读取Hbase中的数据.我们可以使用HQL语句在HBase表上进行查询.插入操作:甚至是进行Join和Union等复杂查询.此功能是从Hive 0. ...

  9. (六)maven 聚合和继承

    项目目录 my_test 聚合pom <?xml version="1.0" encoding="UTF-8"?> <project xmln ...

  10. skynet 初步分析

    自己想实现一个tcp 粘包,残包的功能.  先看看一些开源的库是怎么实现的. 首先开启一个线程.使劲的执行: skynet_socket_poll skynet_socket_poll  这个玩意是干 ...