最简真分数 - 牛客
题目描述
给出n个正整数,任取两个数分别作为分子和分母组成最简真分数,编程求共有几个这样的组合。
输入描述:
每组包含n(n<=600)和n个不同的整数,整数大于1且小于等于1000。
输出描述:
每行输出最简真分数组合的个数。
示例1
输入
7 3 5 7 9 11 13 15
输出
17
思路分析
本道题目的关键就是看 两个整数是否具有公约数,即是否为最简分数
采用一个比较简洁的算法:欧几里得算法
比较巧妙
1 int gcd(int a, int b)//欧几里得算法求最大公约数 2 { 3 if(b==0) return a; 4 else return gcd(b, a%b); 5 }
整个算法就变得很简单:
1 int main() 2 { 3 int N; 4 while(cin>>N) 5 { 6 int a[N]; 7 for(int i=0;i<N;i++) 8 { 9 cin>>a[i]; 10 } 11 int count = 0; 12 for(int i=0;i<N;i++) 13 for(int j =0;j<N;j++) 14 { 15 if(i==j) continue; 16 if(a[i]<a[j] && gcd(a[i],a[j])==1) 17 count++; 18 } 19 20 cout << count <<endl; 21 } 22 }