大意:给定一个直线方程x+y=p;(p为质数)求在第一象限围城的区域里格子的点数有多少。
思路:一条直线上的格子点数为gcd(x,y),那么我们可以直接用三角形上加内的总点数减去在直线上的点数那么在直线上的点数为gcd(x,y)=gcd(x,y-x)(y>x)=gcd(x,p-y)=gcd(x,p)=1所以直线上的点数为0。
注意可能超__int64.
import java.util.*;
import java.math.*;
public class Main{
public static void main(String[] args){
Scanner cin = new Scanner(System.in);
BigInteger a,b,c;
int d;
d = cin.nextInt();
while(d-->0){
a=cin.nextBigInteger();
c=a;
b=cin.nextBigInteger();
a=a.subtract(BigInteger.valueOf(1)) ;
c=c.subtract(BigInteger.valueOf(2)) ;
a=a.multiply(c);
a=a.divide(BigInteger.valueOf(2));
a=a.mod(b);
System.out.println( a.mod(b));
}
cin.close();
}
}
质数直线格点计数

本文介绍了一种计算特定质数直线x+y=p在第一象限内格点数量的方法。利用数学技巧推导直线上的格点数目公式,并通过代码实现高效计算。注意可能存在的整数溢出问题。
3959

被折叠的 条评论
为什么被折叠?



