|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 牵风 于 2021-11-21 13:14 编辑
求满足下面条件的四元组(x1,y1,x2,y2)的个数:
(1)gcd(x1,y1)=gcd(x2,y2)
(2)a<=x1<y1<=b
(3)c<=x2<y2<=d
gcd(x,y)为x和y的最大公约数。如果两个四元组相同,必须每一个位置的元都相同。
输入
输入仅一行,包括四个空格分开的整数a、b、c和d,其含义如上。1<=a<b<=2000且1<=c<d<=2000。
80%的数据b和d的值不超过50。
输出
输出满足上面条件的四元组的个数。
#include<stdio.h>
#include<math.h>
long long int gcd(long long int a,long long int b)
{
long long int r;
r=b%a;
while(r!=0)
{
b=a;a=r;r=b%a;
}
return a;
}
int main()
{
long long int a,b,c,d;
scanf("%lld %lld %lld %lld",&a,&b,&c,&d);
long long int x1,x2,y1,y2;
long long int j,count1[2000]={0},count2[2000]={0},cc=0;
//count数组用于存放gcd对个数
for(x1=a;x1<b;x1++)
{
for(y1=x1+1;y1<=b;y1++)
{
j=gcd(x1,y1);
count1[j]++;
}
}
for(x2=c;x2<d;x2++)
{
for(y2=x2+1;y2<=d;y2++)
{
j=gcd(x2,y2);
count2[j]++;
}
}
for(j=1;j<2000;j++)
cc=cc+count1[j]*count2[j];
printf("%lld",cc);
}
|
|