博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ACM学习历程—HDU5666 Segment(数论)
阅读量:5135 次
发布时间:2019-06-13

本文共 927 字,大约阅读时间需要 3 分钟。

这题的关键是q为质数,不妨设线段上点(x0, y0),则x0+y0=q。

那么直线方程则为y = y0/x0x,如果存在点(x1, y1)在此直线上,

那么y1 = y0*x1/x0,而y0 = q-x0,

于是y1 = (q-x0)*x1/x0 = q*x1/x0-x1,

因为x0 < q,于是(x0, q) = 1,

于是x0 | x1,

而x1 < x0,于是x1 = x0,

也就是说三角形内部的整点都不在线上,

于是计算三角形内部的整点即可。

但是中间计算数据很大,需要用大数,这里采用了Java。

 

代码:

import java.math.BigInteger;import java.util.Scanner;public class Main{    public static void main(String[] args)    {        Scanner input = new Scanner(System.in);        int T = input.nextInt();        BigInteger p, q;        BigInteger two = new BigInteger("2");        BigInteger one = new BigInteger("1");        for (int times = 1; times <= T; ++times)        {            q = input.nextBigInteger();            p = input.nextBigInteger();            q = q.subtract(two);            q = q.multiply(q.add(one));            q = q.divide(two);            System.out.println(q.mod(p));        }    }}
View Code

 

转载于:https://www.cnblogs.com/andyqsmart/p/5427828.html

你可能感兴趣的文章
浅谈 unix, linux, ios, android 区别和联系
查看>>
51nod 1428 活动安排问题 (贪心+优先队列)
查看>>
latex for wordpress(一)
查看>>
如何在maven工程中加载oracle驱动
查看>>
Flask 系列之 SQLAlchemy
查看>>
aboutMe
查看>>
【Debug】IAR在线调试时报错,Warning: Stack pointer is setup to incorrect alignmentStack,芯片使用STM32F103ZET6...
查看>>
一句话说清分布式锁,进程锁,线程锁
查看>>
FastDFS使用
查看>>
服务器解析请求的基本原理
查看>>
[HDU3683 Gomoku]
查看>>
下一代操作系统与软件
查看>>
Python IO模型
查看>>
DataGridView的行的字体颜色变化
查看>>
局域网内手机访问电脑网站注意几点
查看>>
[Serializable]的应用--注册码的生成,加密和验证
查看>>
Android-多线程AsyncTask
查看>>
LeetCode【709. 转换成小写字母】
查看>>
CF992E Nastya and King-Shamans(线段树二分+思维)
查看>>
如果没有按照正常的先装iis后装.net的顺序,可以使用此命令重新注册一下:
查看>>