Segment

 Accepts: 418
 Submissions: 2020
 Time Limit: 2000/1000 MS (Java/Others)
 Memory Limit: 65536/65536 K (Java/Others)
问题描述
\ \ \ \    Rivendell非常神,喜欢研究奇怪的问题.

\ \ \ \    今天他发现了一个有趣的问题.找到一条线段x+y=qx+y=q,令它和坐标轴在第一象限围成了一个三角形,然后画线连接了坐标原点和线段上坐标为整数的格点.

\ \ \ \    请你找一找有多少点在三角形的内部且不是线段上的点,并将这个个数对PP取模后告诉他.
输入描述
\ \ \ \    第一行一个数T,为测试数据组数.

\ \ \ \    接下来每一行两个数qq,PP,意义如题目中所示.

\ \ \ \ q    q是质数且q\le 10^{18},1\le P\le 10^{18},1\le T \le 10q≤10​18​​,1≤P≤10​18​​,1≤T≤10.
输出描述
\ \ \ \    对每组数据,输出点的个数模PP后的值.
输入样例
1
2 107
输出样例
0

官方解:

考虑一条以(0,0)(0,0)为起点,(x,y)(x,y)为终点的线段上格点的个数(不包含端点时),一定是gcd(x,y)-1gcd(x,y)−1,这个很显然吧.

然后整个网格图范围内的格点数目是\frac
{q*(q-1)} 2​2​​q∗(q−1)​​.

所以答案就是\frac
{q*(q-1)} 2 -​2​​q∗(q−1)​​− 所有线段上的格点的个数.

因为gcd(a,b)=gcd(a,b-a)\
(b>a)gcd(a,b)=gcd(a,b−a) (b>a),所以gcd(x,y)=gcd(x,p-x)=gcd(x,p)gcd(x,y)=gcd(x,p−x)=gcd(x,p),p是质数,所以gcd(x,y)=1gcd(x,y)=1,所以线段上都没有格点,所以答案就是\frac
{q*(q-1)} 2​2​​q∗(q−1)​​.

因为数据比较大,所以用的java.当然也可以考虑按位乘

import java.io.BufferedInputStream;
import java.math.BigInteger;
import java.util.Scanner; public class Main { public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner cin = new Scanner (new BufferedInputStream(System.in));
int T;
BigInteger c; BigInteger d;
T = cin.nextInt();
while(T > 0){
c = cin.nextBigInteger();
d = cin.nextBigInteger();
BigInteger a = c.subtract(BigInteger.valueOf(2));
if(a.equals(BigInteger.valueOf(0)))
{
System.out.println(0);
}
else{
c = a.add(BigInteger.valueOf(1));
//system.out.println(c);
a = c.multiply(a);
//System.out.println(a);
a = a.divide(BigInteger.valueOf(2));
a = a.remainder(d);
System.out.println(a);
}
T--;
}
}
}

  

最新文章

  1. 再谈如何使用Taglist?
  2. Java 使用Memcache
  3. java提高篇(十三)-----equals()方法总结
  4. sersync2 安装,配置
  5. 事务的ACID特性
  6. haskell中的monad
  7. Java或Android开发中,去掉块注释格式化后每行出现的星号(*)的解决方案。(Eclipse)
  8. responsive layout
  9. CRF模型
  10. c语言中register类型的变量
  11. POJ2993——Emag eht htiw Em Pleh(字符串处理+排序)
  12. WinCE设置多国语言支持
  13. android自定义TabWidget
  14. <customErrors>节点说明1
  15. css中bug记录
  16. iOS开发基本须要
  17. 必要的软件架构师——编译原理·语法
  18. LPC1788的ADC和DAC使用
  19. javax顶层接口分析
  20. Android 获取网络类型

热门文章

  1. 201621123031 《Java程序设计》第14周学习总结
  2. ExecutorService实际上是一个线程池的管理工具
  3. 多线程socket UDP收发数据
  4. python全栈开发-json和pickle模块(数据的序列化)
  5. AngularJS1.X学习笔记12-Ajax
  6. linux下安装redis和phpredis扩展
  7. DSkin 的WebUI开发模式介绍,Html快速开发Winform的UI
  8. 使用 HttpClient3.1 和 HtmlParser2.1 开发Crawler
  9. 解决编写的 html 乱码问题
  10. GIT入门笔记(1)- Git的基本概念