线段上格点的个数 2018-2-10

给定平面上的两个格点p1=(x1,y1),p2=(x2,y2),线段p1p2上,出两点外一共有几个格点?

限制条件:

-10^9<=x1,x2,y1,y2<=10^9

这个题暴力肯定是不行的,必须要想到答案是gcd(|x1-x2|,|y1-y2|)-1,然后用辗转相除法得解

using namespace std;  int gcd(int a,int b)  
{  if(b==0)  return a;  return gcd(b,a%b);  
}  int main()  
{  int x1,x2,y1,y2;  cin>>x1>>y1>>x2>>y2;  int c=(x1-x2)/gcd(abs(x1-x2),abs(y1-y2)); int k=(y1-y2)/gcd(abs(x1-x2),abs(y1-y2)); int ans=gcd(abs(x1-x2),abs(y1-y2))-1;     while(ans)  {  x1-=c;  y1-=k;  cout<<'('<<x1<<','<<y1<<')'<<endl;  ans--;  }  return 0;