hdu 5666 Segment(BC规律题)

来源:互联网 发布:河北三金网络 编辑:程序博客网 时间:2024/06/16 00:34

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5666

Segment

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 1187    Accepted Submission(s): 433


Problem Description
    Silen August does not like to talk with others.She like to find some interesting problems.

    Today she finds an interesting problem.She finds a segment x+y=q.The segment intersect the axis and produce a delta.She links some line between (0,0)and the node on the segment whose coordinate are integers.

    Please calculate how many nodes are in the delta and not on the segments,output answer mod P.
 

Input
    First line has a number,T,means testcase number.

    Then,each line has two integers q,P.

    q is a prime number,and 2q1018,1P1018,1T10.
 

Output
    Output 1 number to each testcase,answer mod P.
 

Sample Input
12 107
 

Sample Output
0
 

Source
BestCoder Round #80
 

Recommend
wange2014   |   We have carefully selected several similar problems for you:  5674 5673 5672 5671 5670 
 

题目大意:找到线段x+y=q与坐标轴围成三角形中坐标为整点的个数。最后 的结果要对p取模。

解题思路:找规律,假设x+y=5这条线段,按照要求将整点都写出来,发现坐标x+y<5即可,个数计算的公式为:((q-1)*(q-2))/2;

由于数据量比较大,所以采用java来解决。

详见代码。

import java.util.*;import java.math.*;public class Main{    public static void main(String[] args) {        // TODO Auto-generated method stub        int t;        BigInteger q,p,s,ss;        Scanner cin = new Scanner(System.in);        t=cin.nextInt();        while(t>0){            t--;            q=cin.nextBigInteger();            p=cin.nextBigInteger();            s= q.subtract(new BigInteger("1"));            //System.out.println(s);            ss=q.subtract(new BigInteger("2"));            //System.out.println(ss);            s=s.multiply(ss);            s=s.divide(new BigInteger("2"));            s=s.mod(p);            System.out.println(s);        }    }}


0 0
原创粉丝点击