文章标题 CSU 1756 :Prime

Prime

如果a,b的最大公约数是1,说明a,b是一对互素的数,给定你n个数字,希望你找出互素的数的对数
Input

第一行输入一个正整数T,表示数据组数
每组数据第一行输入一个正整数n,表示数字的个数(n<=10000)
接下来一行输入n个正整数,每个数字大小不超过1000。
Output

输出互素的数的对数
Sample Input
1
4
10 9 6 35
Sample Output
3
题意:中文很好理解。
分析:数字的个数是10000,如果直接暴力肯定会超时间,但注意到每个数的大小不超过1000,这要直接枚举1000以内的任意两个数就行了,然后记录每个数出现的次数,当i,j互为质数,互质的对数cnt就加上啊a[i]*a[j],a[i]表示数字i出现的次数。
代码:

#include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
#include<vector>
#include<math.h>
#include<map>
#include<queue> 
#include<algorithm>
using namespace std;
const int inf = 0x3f3f3f3f;
int GCD(int a,int b){
//求最大公约数
    if (b==0)return a;
    GCD(b,a%b);
}
int n;
int a[1005];
int main ()
{
    int t;
    scanf ("%d",&t);
    while (t--){
        scanf ("%d",&n);
        int tmp;
        memset (a,0,sizeof(a)); 
        for (int i=0;i<n;i++){
            scanf ("%d",&tmp);
            a[tmp]++;
        } 
        long long cnt=0;
        cnt=a[1]*(a[1]-1)/2;
        for (int i=1;i<=1000-1;i++){
            for (int j=i+1;j<=1000;j++){
//当i,j互为质数时,cnt加上两者数目的乘积
                if (GCD(i,j)==1)cnt+=(long long)a[i]*a[j];
            }
        }
//输出结果
        printf ("%lld\n",cnt);
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值