题目传送门(内部题104)


输入格式

  第一行一个正整数$T$,表示该测试点内的数据组数,你需要对该测试点内的$T$组数据都分别给出正确的答案才能获得该测试点的分数。
  接下来$T$组数据,每组数据一行两个正整数$p,q$。


输出格式

  对每组数据输出一行一个整数表示答案。


样例

样例输入:

5
1 1
3 5
5 3
2 4
4 2

样例输出:

1
9
7
6
4


数据范围与提示

  对于$50\%$的数据,$1\leqslant p,q\leqslant 10,000$。
  对于$100\%$的数据,$1\leqslant T\leqslant 1,000,1\leqslant p,q\leqslant 1000,000,000=1,000^3$。


题解

$$\begin{array}{ll} 2\sum\limits_{i=0}^p\left\lfloor\frac{iq}{p}\right\rfloor &=& \sum\limits_{i=0}^p\left\lfloor\frac{iq}{p}\right\rfloor+\left\lfloor\frac{(p-i)q}{p}\right\rfloor \\ &=& (p+1)\times q-\sum\limits_{i=0}^p[(p|qi)?0:1] \\ &=& (p+1)\times q-p+gcd(p,q)\end{array}$$

时间复杂度:$\Theta(T\log\max(p,q))$。

期望得分:$100$分。

实际得分:$100$分。


代码时刻

#include<bits/stdc++.h>
using namespace std;
long long p,q;
int main()
{
int T;scanf("%d",&T);
while(T--)
{
scanf("%lld%lld",&p,&q);
printf("%lld\n",((p+1)*q-p+__gcd(p,q))>>1);
}
return 0;
}

rp++

最新文章

  1. Jade之属性
  2. 战胜忧虑&lt;2&gt;——忙碌可以消除忧虑
  3. C++:四种必须使用初始化列表情况
  4. 转:关于JAVA多线程同步
  5. POJ3080Blue Jeans
  6. Alexander Grothendieck去世了
  7. RR 和RC隔离问题
  8. python切片练习
  9. Java—Day5课堂练习
  10. C 程序实现密码隐秘输入 linux系统可执行
  11. pstree 命令详解
  12. scss 初学笔记 二 混合宏
  13. Redis基础及入门
  14. TCP和UDP的最完整的区别
  15. SpringSecurity3Demo【原】
  16. select监听udp消息
  17. mysql表管理
  18. Linux 环境变量_006
  19. python第二十九天-----继续学习第三模块——前几天旅行去了
  20. 运用kNN算法识别潜在续费商家

热门文章

  1. 更新到.netcore3.0后找不到dotnet-ef的解决办法
  2. windows环境下搭建mysql主从
  3. mysql5.6
  4. C#判断点是否在直线上
  5. Ajax跳入error的原因
  6. host - 使用域名服务器查询主机名字
  7. Linux20期学习笔记 Day3
  8. 数据可视化之颜色,线型,maker
  9. Educational Codeforces Round 77 比赛总结
  10. robotframework 使用Chrome手机模拟器两种方法