题目链接: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.
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 2≤q≤1018,1≤P≤1018,1≤T≤10.
Then,each line has two integers q,P.
q is a prime number,and 2≤q≤1018,1≤P≤1018,1≤T≤10.
Output
Output 1 number to each testcase,answer mod P.
Sample Input
1 2 107
Sample Output
0
Source
Recommend
解题思路:找规律,假设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);
}
}
}