BestCoder Round #80(B)高精度
2016-04-17 10:29
260 查看
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≤1018,1≤P≤1018,1≤T≤10.
输出描述
\ \ \ \ 对每组数据,输出点的个数模PP后的值.
输入样例
1 2 107
输出样例
0
题解:画个图数一下
可以找到规律,是个等差数列求和,这里直接使用公式求和会爆LL,而使用循环求和会超时,这题有2种解法。1。Java大法好,直接上高精度大整数就好啦,2.使用快速和取模
import java.lang.reflect.Array; import java.math.BigInteger; import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { int n; Scanner in=new Scanner(System.in); n=in.nextInt(); BigInteger p,q; while(n--!=0) { BigInteger sum= new BigInteger("2"); p=in.nextBigInteger(); q=in.nextBigInteger(); if(p.compareTo(BigInteger.ONE)==0||p.compareTo(sum)==0) { System.out.println("0"); } else { BigInteger ww=new BigInteger("2");; p=p.subtract(ww); sum=p.add(BigInteger.ONE); p=p.multiply(sum); p=p.divide(ww); System.out.println(p.mod(q)); } } } }
相关文章推荐
- 一些linux的基本操作
- Oracle 11g standby主从配置
- Oracle笔记(三) Scott用户的表结构
- 水仙花数的输出
- 武器游戏
- 多文件游戏
- Android开发之开发者头条(一)启动页实现
- 一个字符串反转的小例子
- Oracle笔记(二) SQLPlus命令
- http2.0 相对于 http1.1的优势
- 剑指offer(八)之斐波那契数列
- 201301 JAVA题目0-1级
- c++搜索二叉树的基本操作
- 设计模式-可复用面向对象软件的基础 [读书笔记]
- Oracle笔记(一) Oracle简介及安装(oracle10g)
- 如何发布javaSE写的小程序
- 梦断代码阅读笔记01
- linux内核分析第八次实验
- DevExpress控件安装和初次使用图解
- php中需要注意的问题