题目描述
给出 n 个正整数,任取两个数分别作为分子和分母组成最简真分数,编程求共有几个这样的组合。
输入描述
有多组测试数据,每组测试数据有两行。
第一行为一个整数 n (n <= 600)。
在第二行中有 n 个以空格分隔的不同的整数(大于等于 1 且小于等于 10, 000)。
当 n = 0 时,程序结束,不需要处理这组数据。
输出描述
每行输出最简真分数组合的个数
样例输入
7
3 5 7 9 11 13 15
3
2 4 5
0
样例输出
17
2
代码
#include<bits/stdc++.h>
using namespace std;
void Rank(int *Num) {
for (int i = 1; i <= Num[0]; i++)
{
int MinIndex = i;
for (int j = i; j < Num[0]; j++)
{
if (Num[MinIndex] > Num[j]) {
MinIndex = j;
}
}
int temp = Num[MinIndex];
Num[MinIndex] = Num[i];
Num[i] = Num[MinIndex];
}
}
bool Gong_Yue(int a,int b) {
int Bigger;
int Littler;
Bigger = a > b ? a : b;
Littler = a < b ? a : b;
for (int i = 2; i <= Littler; i++)
{
if (Littler % i == 0 && Bigger % i == 0) {
return 1;
}
}
return false;
}
int main() {
int n = 0;
while (cin>>n)
{
if(n==0){
break;
}
//初始化数组
int * Num = new int[n+1];
for (int i = 1; i < n + 1; i++) {
cin >> Num[i];
}
Num[0] = n;
//排序
Rank(Num); //小的在前面
//判断有没有公约数
int count = 0;
for (int i = 1; i < n + 1; i++) {
for (int j = i+1; j < n+1; j++)
{
if (Gong_Yue(Num[i], Num[j])==0) {
//没有公约数
count++;
}
}
}
cout<<count<<endl;
}
return 0;
}