csu 1756: Prime
Posted 极速快码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csu 1756: Prime相关的知识,希望对你有一定的参考价值。
1756: Prime
Time Limit: 3 Sec Memory Limit: 128 Mb Submitted: 281 Solved: 69
Description
如果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
Hint
Source
3901130321题解:数字大小最大就是1000 开一个数组保存每一个数字出现的次数
然后从1开始枚举 判断1-2 1-3 1-4 ;;;1-999 1-1000 2-3 2-4 ;;;;n-1 - n
是不是互素 如果是 就加上
1 #include <iostream> 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <algorithm> 5 #include <cstring> 6 #include <math.h> 7 8 using namespace std; 9 int a,num[1005]; 10 int gug(int x,int y) 11 { 12 if(x%y==0)return y; 13 return gug(y,x%y); 14 } 15 int main() 16 { 17 int t,n; 18 scanf("%d",&t); 19 while(t--) 20 { 21 for(int i=0; i<1005; ++i) 22 { 23 num[i]=0; 24 } 25 scanf("%d",&n); 26 for(int i=0; i<n; ++i) 27 { 28 scanf("%d",&a); 29 num[a]++; 30 } 31 int ans=0; 32 if(num[1]>0)ans+=num[1]*(num[1]-1)/2; 33 for(int i=2; i<1000; ++i) 34 { 35 ans+=num[1]*num[i]; 36 for(int j=i+1; j<=1000; ++j) 37 { 38 if((num[j]!=0)&&(gug(j,i)==1)) 39 ans+=num[i]*num[j]; 40 } 41 } 42 ans+=num[1]*num[1000]; 43 printf("%d\n",ans); 44 } 45 46 return 0; 47 }
以上是关于csu 1756: Prime的主要内容,如果未能解决你的问题,请参考以下文章