zoukankan      html  css  js  c++  java
  • Triple ACM HDU 3908 (数学题,找多少种组合)

    Triple

    Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/Others)
    Total Submission(s): 387    Accepted Submission(s): 153


    Problem Description
    Given many different integers, find out the number of triples (a, b, c) which satisfy a, b, c are co-primed each other or are not co-primed each other. In a triple, (a, b, c) and (b, a, c) are considered as same triple.
     

    Input
    The first line contains a single integer T (T <= 15), indicating the number of test cases.
    In each case, the first line contains one integer n (3 <= n <= 800), second line contains n different integers d (2 <= d < 105) separated with space.
     

    Output
    For each test case, output an integer in one line, indicating the number of triples.
     

    Sample Input
    1 6 2 3 5 7 11 13
     

    Sample Output
    20
     

    Source
     

    Recommend
    xubiao
     
     
    /*
    题目描述:
    给你n个数,问满足条件1或者条件2的a,b,c组合有多少个。
    条件1:任意两个互质
    条件2:任意两个不互质
    解题报告:
    只要统计a[i]:和第i个数互质的有多少个。
    和b[i]:和第i个数不互质的有多少个。
    那么a[i] * b[i]是包含i的不合法的组合的一个子集。
    不难发现,对每个i进行这样的操作,能够覆盖到所有的不满足条件的abc,而且是算了两次。
    所以,最后就是C(n,3)- sum/2即可。

    */
    #include
    <stdio.h>
    #define MAXN 10010
    int a[MAXN],b[MAXN],num[MAXN];
    int gcd(int da,int xiao)//求最大公约数的循环形式
    {
    int temp;
    while(xiao!=0)
    {
    temp
    =da%xiao;
    da
    =xiao;
    xiao
    =temp;
    }
    return da;
    }
    int main()
    {
    //freopen("test.in","r",stdin);
    //freopen("test.out","w",stdout);
    int T,n,i,j;
    int sum;//不符合的总数
    scanf("%d",&T);
    while(T--)
    {
    scanf(
    "%d",&n);
    for(i=1;i<=n;i++)
    {
    scanf(
    "%d",&num[i]);
    a[i]
    =0;//a[i]表示与num[i]互质的数的个数
    b[i]=0;//a[i]表示与num[i]不互质的数的个数
    }
    sum
    =0;
    for(i=1;i<=n;i++)
    {
    for(j=1;j<i;j++)
    {
    if(gcd(num[i],num[j])==1) a[i]++;
    else b[i]++;
    }
    for(j=i+1;j<=n;j++)
    {
    if(gcd(num[i],num[j])==1) a[i]++;
    else b[i]++;
    }
    sum
    +=a[i]*b[i];
    }
    int cnt=n*(n-1)*(n-2)/6-sum/2;
    printf(
    "%d\n",cnt);
    }
    return 0;
    }

  • 相关阅读:
    mac 配置环境变量
    c语言中的0UL或1UL是什么意思
    javascript类型系统——正则表达式RegExp类型
    javascript运算符——算术运算符
    javascript类型系统——Number数字类型
    javascript类型系统——包装对象
    javascript基础语法——表达式
    valueOf()方法
    toString()方法
    javascript基础语法——变量和标识符
  • 原文地址:https://www.cnblogs.com/kuangbin/p/2126230.html
Copyright © 2011-2022 走看看