牵风 发表于 2021-11-21 12:44:30

cc=cc+count1[j]*count2[j];这是什么意思

本帖最后由 牵风 于 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={0},count2={0},cc=0;
//count数组用于存放gcd对个数
        for(x1=a;x1<b;x1++)
        {
                for(y1=x1+1;y1<=b;y1++)
                {
                        j=gcd(x1,y1);
                        count1++;
                }
        }
        for(x2=c;x2<d;x2++)
        {
                for(y2=x2+1;y2<=d;y2++)
                {
                        j=gcd(x2,y2);
                        count2++;
                }
        }

        for(j=1;j<2000;j++)
                cc=cc+count1*count2;
        printf("%lld",cc);
}

jackz007 发表于 2021-11-21 13:02:21

本帖最后由 jackz007 于 2021-11-21 13:04 编辑

cc = cc + count1 * count2
      没什么,只要把count1 、count2 当成一个普通变量就好了。
      count1 是一维数组 count1 下标为 j 的元素,而 count2 则是一维数组 count2 下标为 j 的元素。

牵风 发表于 2021-11-21 13:15:17

jackz007 发表于 2021-11-21 13:02
cc = cc + count1 * count2
      没什么,只要把count1 、count2 当成一个普通变量就好 ...

那为什么用*呢

jackz007 发表于 2021-11-21 13:17:02

牵风 发表于 2021-11-21 13:15
那为什么用*呢

      那是乘号(×)啊大哥!

牵风 发表于 2021-11-21 13:52:56

jackz007 发表于 2021-11-21 13:17
那是乘号(×)啊大哥!

我以为是指针{:5_94:}
页: [1]
查看完整版本: cc=cc+count1[j]*count2[j];这是什么意思