题目链接: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
2≤q≤1018,1≤P≤1018,1≤T≤10.
Output
Output 1 number to each testcase,answer mod P.
Sample Input
Sample Output
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);
}
}
}